web-dev-qa-db-ja.com

「リスト」オブジェクトには属性「形状」がありません

配列を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配列に変換する必要があると思いますか?

45
sam

shape属性を使用するには、 numpy.array を使用します。

>>> 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)

NOTEX.shapeは、指定された配列の3-items Tupleを返します。 [n, T] = X.shapeValueErrorを発生させます。

52
falsetru

または、np.shape(...)を使用できます

例えば:

import numpy as np

a=[1,2,3]

np.shape(a)(3,)の出力を提供します

16
Ludwig Zhou
import numpy
X = numpy.array(the_big_nested_list_you_had)

それでも、あなたが望むことをするつもりはありません。 testの2つのターゲット変数に3次元形状をアンパックしようとするなど、さらにバグがあります。

12
user2357112

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]])

この説明がこの質問を明確にすることを願っています。

5
Yura Vasiliuk

リストがあれば、その形状を配列に変換するかのように印刷できます

import numpy as np
print(np.asarray(X).shape)
3
max

タイプがリストの場合、len(list)およびlen(list [0])を使用して行と列を取得します。

l = [[1,2,3,4], [0,1,3,4]]

len(l)は2になりますlen(l [0])は4になります

2
ZHX

まず、numpyライブラリをインポートする必要があります(numpy配列を作成するためのコードを参照)shapeは、変数がnumpyライブラリの属性である場合にのみ出力を提供します。 numpyの。例えば。

`>>> import numpy
>>> a=numpy.array([[1,1],[1,1]])
>>> a.shape
(2, 2)`
0
yunus