numpy.random.uniform, примененный к индексу массива, производит целые числа - PullRequest
0 голосов
/ 28 октября 2019

Я хочу заполнить массив равномерно выбранными числами с плавающей точкой, но когда я пытаюсь это сделать, вместо этого я получаю целые числа:

#Initial parameters
P = np.full(1, 0)
lower_bounds = np.full(1, 0)
upper_bounds = np.full(1, np.pi)

def candidate(P):
    for k in range(len(P)):
        P[k] = np.random.uniform(lower_bounds[k],upper_bounds[k])
    return P

print(candidate(P))

Это печатает [0], [1], [2] или[3], тогда как

print(np.random.uniform(lower_bounds[0],upper_bounds[0]))

печатает плавающее число по желанию. Я не уверен, почему это происходит.

1 Ответ

0 голосов
/ 28 октября 2019

Когда вы инициализировали P, он стал массивом целых чисел.

P = np.full(1, 0)
print(P.dtype)  # prints dtype('int64')

Когда позже вы присвоите результат np.random.uniform для P[k], значение с плавающей запятой, возвращаемое np.random.uniform, было усечено иВы только что получили целую часть.

Используйте взамен P = np.full(1,0.0) или P = np.full(1,0, dtype=float).

...