Список не имеет атрибута изменить форму - PullRequest
0 голосов
/ 04 мая 2019

В приведенном ниже коде я получаю сообщение об ошибке в последней строке, в которой список имеет атрибут reshape

cal должен быть пустым массивом, но cal.reshape выдает ошибку.Кроме того, при печати cal я получаю массив из 13 элементов, но ожидался массив из 4 элементов, который будет суммой элементов вдоль строк.

import numpy as np

A=np.array([[56.0,0.0,4.4,68.0],

[1.0,2.0,104.0,52.0,8.0],

[1.8,135.0,99.0,0.9]])

cal=A.sum(axis=0)

print(cal)

percentage=100*A/cal.reshape(1,4)

cal должен быть массивом, но cal.reshapeдает ошибку.Также при печати cal я получаю массив из 13 элементов, но ожидался массив из 4 элементов, который будет суммой элементов вдоль строк.

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Если вы внимательно посмотрите, ваш 2D-список A содержит 5 элементов во второй строке вместо 4, как и другие строки, и это вызывает проблемы с np.sum, поскольку numpy предполагает однородный массив, где все подсписки имеют равные строки.

Так что вам нужно либо удалить элемент из 2-го списка, например, так (в приведенном ниже примере я удалил первый элемент), чтобы сделать ваш массив 3x4

import numpy as np

A=np.array([[56.0,0.0,4.4,68.0],

[2.0,104.0,52.0,8.0],

[1.8,135.0,99.0,0.9]])

cal=A.sum(axis=0)

print(cal)

percentage=100*A/cal
print(percentage)

и выводполучается как

[[93.64548495  0.          2.83140283 88.42652796]
 [ 3.34448161 43.51464435 33.46203346 10.40312094]
 [ 3.01003344 56.48535565 63.70656371  1.17035111]]

Или вы можете добавить дополнительные 0 в первой и третьей строке и изменить форму массива в (1,5)

import numpy as np

A=np.array([[56.0,0.0,4.4,68.0, 0],

[1.0, 2.0,104.0,52.0,8.0],

[1.8,135.0,99.0,0.9, 0]])

cal=A.sum(axis=0)

print(cal)

percentage=100*A/cal
print(percentage)

Вывод здесь будет

[[ 95.23809524   0.           2.12150434  56.24483044   0.        ]
 [  1.70068027   1.45985401  50.14464802  43.01075269 100.        ]
 [  3.06122449  98.54014599  47.73384764   0.74441687   0.        ]]
1 голос
/ 04 мая 2019

Проблема в том, что во 2-й строке 5 элементов вместо 4. Если вы исправите эту ошибку, ваш скрипт будет работать.

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