Объект 'list' не имеет атрибута 'shape'
как создать массив для массива numpy?
def test(X, N):
[n,T] = X.shape
print "n : ", n
print "T : ", T
if __name__=="__main__":
X = [[[-9.035250067710876], [7.453250169754028], [33.34074878692627]], [[-6.63700008392334], [5.132999956607819], [31.66075038909912]], [[-5.1272499561309814], [8.251499891281128], [30.925999641418457]]]
N = 200
test(X, N)
Я получаю сообщение об ошибке как
AttributeError: 'list' object has no attribute 'shape'
Итак, мне кажется, мне нужно преобразовать массив X в numpy?
Ответы
Ответ 1
Используйте numpy.array
для использования атрибута shape
.
>>> import numpy as np
>>> X = np.array([
... [[-9.035250067710876], [7.453250169754028], [33.34074878692627]],
... [[-6.63700008392334], [5.132999956607819], [31.66075038909912]],
... [[-5.1272499561309814], [8.251499891281128], [30.925999641418457]]
... ])
>>> X.shape
(3L, 3L, 1L)
ПРИМЕЧАНИЕ X.shape
возвращает 3-элементный кортеж для данного массива; [n, T] = X.shape
вызывает ValueError
.
Ответ 2
import numpy
X = numpy.array(the_big_nested_list_you_had)
Он по-прежнему не собирается делать то, что вы хотите; у вас больше ошибок, например, попытка распаковать трехмерную фигуру на две целевые переменные в test
.
Ответ 3
объект списка в python не имеет атрибута 'shape', потому что 'shape' подразумевает, что все столбцы (или строки) имеют равную длину вдоль определенной размерности.
Пусть говорят, что переменная списка a имеет следующие свойства:
a = [[2, 3, 4]
[0, 1]
[87, 8, 1]]
невозможно определить "форму" для переменной "a".
Вот почему "форма" может определяться только "массивами", например.
b = numpy.array([[2, 3, 4]
[0, 1, 22]
[87, 8, 1]])
Надеюсь, что это объяснение хорошо объясняет этот вопрос.
Ответ 4
В качестве альтернативы вы можете использовать np.shape(...)
Например:
import numpy as np
a=[1,2,3]
и np.shape(a)
выдаст результат (3,)