Изменить значения массива numey итеративно - PullRequest
0 голосов
/ 01 ноября 2018

У меня проблемы с массивом numpy: a1 - это пустой массив (3-мерный вектор), а update - это список из трех значений. Я хочу, чтобы первое измерение a1 было первым значением, второе измерение - вторым значением, а третье измерение - третьим.

a1 = [0, 0, 0]
update = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]

В общем, я хочу:

a1 = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]

Теперь, если я попытаюсь повторить:

for i in range(0,3):
    a1[i] = update[i]

Значения в массиве a1 не изменились, я все еще получаю:

a1 = [0, 0, 0]

Почему это происходит и как мне обойти эту проблему?

1 Ответ

0 голосов
/ 01 ноября 2018

Я предполагаю, что ваш код выглядит примерно так

a1 = np.array([0, 0, 0])
update = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]
for i in range(0,3):
    a1[i] = update[i]
print(a1)

который действительно печатает array([0 0 0])

Причина, по которой вы наблюдаете это поведение, состоит в том, что в отличие от списков Python, массивы numpy должны содержать значения одного типа. Когда вы создали массив a1, вы не указали тип явно, создавая массив int64. Попробуйте сделать

print(a1.dtype)

update - это массив float64, где все числа меньше 1. Когда вы конвертируете число с плавающей точкой <1 в int, оно становится равным 0. </p>

Решением вашей проблемы является явное указание типа массива a1.

a1 = np.array([0, 0, 0], dtype='float64')

На другом примечании, почему вы копируете элемент за элементом? Вы могли бы сделать

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