как генерировать случайные массивы 50000 float [duplicate]

Почти все предоставленные ответы требуют полной десериализации 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.

30
задан Gabriel 27 February 2014 в 16:50
поделиться

7 ответов

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,))
48
ответ дан JoshAdel 26 August 2018 в 05:27
поделиться

Это самый простой способ

np.random.uniform(start,stop,(rows,columns))
1
ответ дан Graham 26 August 2018 в 05:27
поделиться

Почему бы не использовать понимание списка?

ran_floats = [random.uniform(low,high) for _ in xrange(size)]
9
ответ дан isedev 26 August 2018 в 05:27
поделиться

Для цикла 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)

1
ответ дан Mohamed Ibrahim 26 August 2018 в 05:27
поделиться

Возможно, уже существует функция делать то, что вы ищете, но я не знаю об этом (пока?). В то же время я бы посоветовал использовать:

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) для получения дополнительной информации.

2
ответ дан PhilMacKay 26 August 2018 в 05:27
поделиться

Почему бы не объединить 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]
3
ответ дан pkacprzak 26 August 2018 в 05:27
поделиться

В качестве альтернативы вы можете использовать SciPy

from scipy import stats
stats.uniform(0.5, 13.3).rvs(50)

, а для записи для целых чисел это

stats.randint(10, 20).rvs(50)
1
ответ дан Stuart Hallows 26 August 2018 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: