Подтвердить что ты не робот

Объект '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?

4b9b3361

Ответ 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,)