np.array
は可能な限り高次元の配列を作成しようとしています。サブリストに一致する数の要素がある場合、結果は見やすくなります。異なる長さのリストを混在させると、結果が混乱する可能性があります。あなたの最初のケースで
あなたは2つのサブリスト、長さ3の1、だから、2要素オブジェクトの配列を行い、第一サブリストのサブリストを解析しようとしません。4.その他の長さを持っている
In [1]: arr = np.array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]], [1,2,4,3]])
In [2]: arr
Out[2]: array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]],
[1, 2, 4, 3]
], dtype=object) # adjusted format
In [3]: arr.dtype
Out[3]: dtype('O')
In [4]: arr.shape
Out[4]: (2,)
In [5]: arr[0]
Out[5]: [[5, 10, 15], [20, 25, 30], [35, 40, 45]] # 3 element list of lists
In [6]: arr[1]
Out[6]: [1, 2, 4, 3] # 4 element list of numbers
2番目のケースでは、長さ3の2つのサブリストがあります。したがって、2x3配列になります。
In [7]: arr = np.array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]], [1,2,4]])
In [8]: arr
Out[8]:
array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]],
[1, 2, 4]
], dtype=object)
In [9]: arr.shape
Out[9]: (2, 3)
In [10]: arr[0,0]
Out[10]: [5, 10, 15]
最後に、2つのリスト、また、3つの要素リストでそれぞれが3つの要素、各 - 3Dアレイ:結果は再び配列オブジェクトであるように - しかし、一つのサブリストは、リスト、他の数字を含んでいます。
In [11]: arr = np.array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]], [[1,2,4], [3,4,2], [1,2,4]]])
In [12]: arr
Out[12]:
array([[[ 5, 10, 15],
[20, 25, 30],
[35, 40, 45]],
[[ 1, 2, 4],
[ 3, 4, 2],
[ 1, 2, 4]]])
In [13]: arr.shape
Out[13]: (2, 3, 3)
エラーを発生させる可能性のあるサブリストの長さが混在しています。
一般に、異なるサイズとコンテンツタイプのサブリストを簡単に混在させないでください。 np.array
は、素敵な多次元配列を生成する与えられたリストが最も予測可能に動作します。リストの長さを混ぜると、混乱することになります。
更新numpyの:
In [1]: np.__version__
Out[1]: '1.13.1'
In [2]: np.array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]], [1,2,4,3]])
Out[2]: array([list([[5, 10, 15], [20, 25, 30], [35, 40, 45]]), list([1, 2, 4, 3])], dtype=object)
In [3]: np.array([[[5, 10, 15], [20, 25, 30], [35, 40, 45]], [1,2,4]])
Out[3]:
array([[list([5, 10, 15]), list([20, 25, 30]), list([35, 40, 45])],
[1, 2, 4]], dtype=object)
を今この最後の例では、依然として(2,3)オブジェクト配列であるlist
要素
を識別する。あなたは、変数ごと*サブリスト*の要素数、オブジェクトDTYPEとの配列を強制的に、定期的な*いない* 1を持っているので、これらの6つの要素のように、それぞれ例えば、異なるPythonのタイプかもしれない:
In [11]: np.array([[[5, 10, 15], np.array([20, 25, 30]), (35, 40, 45)], [None,2,'astr']])
Out[11]:
array([[list([5, 10, 15]), array([20, 25, 30]), (35, 40, 45)],
[None, 2, 'astr']], dtype=object)
In [12]: [type(x) for x in _.flat]
Out[12]: [list, numpy.ndarray, tuple, NoneType, int, str]
ようです。 – Divakar
numpy 1.13.xにアップグレードすると、これらのオブジェクト配列は紛らわしく印刷されません – Eric
'numpy'は真の多次元配列のみをサポートしません。したがって、コンストラクタがサブリストがギザギザの配列を生成することを検出すると、Pythonオブジェクトの1次元配列を作成します。 –