Добавление значений в новый массив - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть существующий массив python, созданный с нулями.Как перебрать и изменить значения?

Я не могу перебрать и изменить элементы массива Python?

num_list = [1,2,3,3,4,5,]
mu = np.mean(num_list)
sigma = np.std(num_list)
std_array = np.zeros(len(num_list))

for i in std_array:
        temp_num = ((i-mu)/sigma)
        std_array[i]=temp_num

Это ошибка: только целые числа, ломтики (:), многоточие (...), numpy.newaxis (None) и целые или логические массивы являются допустимыми индексами

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

You i является элементом из std_array, который равен float.Поэтому Numpy жалуется, что вы пытаетесь нарезать с помощью float, где:

только целые числа, срезы (:), многоточие (...), numpy.newaxis (None) и целые или логические массивы являются действительными индексами

Если вам не нужно использовать for, тогда numpy может передать вам вычисления:

(std_array - mu)/sigma
# array([-2.32379001, -2.32379001, -2.32379001, -2.32379001, -2.32379001,
   -2.32379001])
0 голосов
/ 19 февраля 2019

В вашем коде вы перебираете элементы numpy.array std_array, но затем используете эти элементы в качестве индексов для разыменования std_array.Простым решением было бы следующее:

num_arr = np.array(num_list)
for i,element in enumerate(num_arr):
    temp_num = (element-mu)/sigma
    std_array[i]=temp_num

, где я предполагаю, что вы хотите использовать значение num_list в первой строке цикла при вычислении temp_num.Обратите внимание, что я создал новый numpy.array с именем num_arr.Это связано с тем, что вместо зацикливания мы можем использовать альтернативное решение, которое использует широковещание :

std_array = (num_arr-mu)/sigma

Это эквивалентно циклу, но выполняется быстрее и проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...