Невозможно переназначить значение в массиве numpy - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь заполнить links значениями от a, увеличенными или уменьшенными на 0.1.
. Вывод кода ниже является начальным links ... Однако, как только я удалить эти 0.1 код работает отлично. Почему? Как я могу это исправить?

a=np.random.randint(2, size=(9,9)) 
links = np.diag([1]*9) 
m = np.random.choice(9, 3, replace=False).tolist()
for j in m:
    row = a.take(j, axis=0).tolist()
    link_can = np.arange(9)
    link_can = link_can[link_can != j]
    link_can = np.random.choice(link_can, 3, replace=False).tolist()
for i in link_can:
    if row[i]==1:
        links[j, i] = row[i] - .1 
        links[i, j] = row[i] - .1
    else:
        links[j, i] = row[i] + .1 
        links[i, j] = row[i] + .1
links

1 Ответ

0 голосов
/ 14 марта 2020

Ваш массив links имеет тип int. Позже вы выполняете float операции и вставляете float в свой массив. numpy преобразует это обратно в int, теряя при этом +/- 0,1.

Вы должны конвертировать array в тип float, используя astype, как показано в этом примере:

>>> arr = np.array([0])
>>> arr
array([0])
>>> arr[0] = arr[0] + 0.1
>>> arr
array([0])
>>> arr = arr.astype(float)
>>> arr
array([0.])
>>> arr[0] = arr[0] + 0.1
>>> arr
array([0.1])

После изменения типа array на float обновление работает как положено.

Поэтому вы можете изменить links следующим образом:

links = np.diag([1]*9).astype(float)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...