Почти все предоставленные ответы требуют полной десериализации JSON в объект Java перед тем, как получить доступ к значению интересующего свойства. Другой альтернативой, которая не идет по этому пути, является использование JsonPATH , который похож на XPath для JSON и позволяет перемещаться по объектам JSON.
Это спецификация и хорошие люди в JayWay создали Java-реализацию для спецификации, которую вы можете найти здесь: https://github.com/jayway/JsonPath
Поэтому, чтобы использовать его, добавьте его в свой проект , например:
com.jayway.jsonpath
json-path
${version}
и использовать:
String pageName = JsonPath.read(yourJsonString, "$.pageInfo.pageName");
String pagePic = JsonPath.read(yourJsonString, "$.pageInfo.pagePic");
String post_id = JsonPath.read(yourJsonString, "$.pagePosts[0].post_id");
и т. д. ...
Проверьте дополнительную страницу спецификации JsonPath для получения дополнительной информации о других способах к поперечному JSON.
np.random.uniform
соответствует вашему варианту использования: http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html
sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))
Это самый простой способ
np.random.uniform(start,stop,(rows,columns))
Почему бы не использовать понимание списка?
ran_floats = [random.uniform(low,high) for _ in xrange(size)]
Для цикла for в понимании списка требуется время и замедляется. Лучше использовать параметры numpy (низкий, высокий, размер, ..etc)
import numpy as np
import time
rang = 10000
tic = time.time()
for i in range(rang):
sampl = np.random.uniform(low=0, high=2, size=(182))
print("it took: ", time.time() - tic)
tic = time.time()
for i in range(rang):
ran_floats = [np.random.uniform(0,2) for _ in range(182)]
print("it took: ", time.time() - tic)
выход образца:
('it took:', 0.06406784057617188)
('it take:', 1.7253198623657227)
Возможно, уже существует функция делать то, что вы ищете, но я не знаю об этом (пока?). В то же время я бы посоветовал использовать:
ran_floats = numpy.random.rand(50) * (13.3-0.5) + 0.5
. Это создаст массив формы (50) с равномерным распределением между 0,5 и 13,3.
Вы также можете определить функция:
def random_uniform_range(shape=[1,],low=0,high=1):
"""
Random uniform range
Produces a random uniform distribution of specified shape, with arbitrary max and
min values. Default shape is [1], and default range is [0,1].
"""
return numpy.random.rand(shape) * (high - min) + min
EDIT: Хм, да, поэтому я пропустил это, есть numpy.random.uniform () с тем же самым точным вызовом, который вы хотите! Попробуйте import numpy; help(numpy.random.uniform)
для получения дополнительной информации.
Почему бы не объединить random.uniform со списком?
>>> def random_floats(low, high, size):
... return [random.uniform(low, high) for _ in xrange(size)]
...
>>> random_floats(0.5, 2.8, 5)
[2.366910411506704, 1.878800401620107, 1.0145196974227986, 2.332600336488709, 1.945869474662082]
В качестве альтернативы вы можете использовать SciPy
from scipy import stats
stats.uniform(0.5, 13.3).rvs(50)
, а для записи для целых чисел это
stats.randint(10, 20).rvs(50)