python - np.random.random округление до 1 знака после запятой - PullRequest
0 голосов
/ 21 июня 2020

Попытка сгенерировать числа с помощью np.random.random:

for portfolio in range(2437):
    weights = np.random.random(3)
    weights /= np.sum(weights)

    print(weights)

Это работает так, как ожидалось:

[0.348674 0.329747 0.321579]
[0.215606 0.074008 0.710386]
[0.350316 0.589782 0.059901]
[0.639651 0.025353 0.334996]
[0.697505 0.171061 0.131434]
.
.
.
.

однако, как мне изменить числа так, чтобы каждая строка была ограничено одним десятичным знаком, например:

[0.1 0.2 0.7]
[0.2 0.2 0.6]
[0.5 0.4 0.1]
.
.
.
.

Ответы [ 4 ]

3 голосов
/ 21 июня 2020

Вы можете использовать

In [1]: weights.round(1)
Out[2]: array([0.4, 0.5, 0.2])

Аргумент для round - это количество десятичных цифр, которое вы хотите. Он также принимает отрицательные аргументы, что означает округление до степени десяти больше единицы:

In [2]: np.array([123, 321, 332]).round(-1)
Out[2]: array([120, 320, 330])
2 голосов
/ 21 июня 2020

Только для визуализации вы можете использовать np.set_printoptions:

import numpy as np
np.set_printoptions(precision=1, suppress=True)

np.random.rand(4, 4)
array([[0.8, 0.8, 0.3, 0.3],
       [0.1, 0.2, 0. , 0.2],
       [0.8, 0.2, 1. , 0.2],
       [0.2, 0.7, 0.6, 0.2]])
1 голос
/ 21 июня 2020

возможно мой ответ не самый действенный, но он есть:

for portfolio in range(2437):
    weights = np.random.random(3)
    weights /= np.sum(weights)
    t_weights = []
    for num in weights:
        num *= 10
        num = int(num)
        num = float(num) / 10
        t_weights.append(num)
    weights = t_weights

    print(weights)
1 голос
/ 21 июня 2020

можете попробовать np.round:

weights  = np.round(weights, 1)
...