看看你V
表達創造了什麼:
In [3]: V
Out[3]:
array([ array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]),
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]),
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])], dtype=object)
In [4]: V.shape
Out[4]: (3,)
In [5]: V[0].shape
Out[5]: (3, 4)
In [6]: V[1].shape
Out[6]: (2, 4)
In [7]: V[2].shape
Out[7]: (2, 4)
這是一個3元的對象類型數組。元素是2d浮點數組。
如果我改變了第一子陣列,以只包含2個陣列,得到了一個三維陣列
In [11]: V1 = np.array([
...: np.array([np.zeros(S3), np.zeros(S3)]),
...: np.array([np.zeros(S3), np.zeros(S3)]),
...: np.array([np.zeros(S3), np.zeros(S3)])
...: ])
In [12]: V1.shape
Out[12]: (3, 2, 4)
構建數組的數組是棘手,因爲np.array
嘗試構建一個多維數組,而不是參差不齊的對象陣列。
@trincot's
嵌套列表是更可預測
In [15]: L1 = [[[0]*S3 for _ in range(size)] for size in S2]
In [16]: L1
Out[16]:
[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
[[0, 0, 0, 0], [0, 0, 0, 0]],
[[0, 0, 0, 0], [0, 0, 0, 0]]]
通常對象陣列的D型細胞陣列來構建疼痛,也很少超過相似列表提供處理的優點。
扔幾array
包裝和嵌套列表理解複製您的V
:
A3 = np.array([np.array([np.zeros(S3) for _ in range(size)]) for size in S2])
它概括你的V
表達,但是,它並沒有改善。
爲了確保我有3個陣列層我不得不做出這樣一個結構:
In [25]: A1=np.zeros((S1,),object)
In [27]: for i,n in enumerate(S2):
...: A = np.zeros((n,), object)
...: for j in range(n):
...: A[j]=np.zeros(S3)
...: A1[i]=A
In [28]: A1
Out[28]:
array([ array([array([ 0., 0., 0., 0.]), array([ 0., 0., 0., 0.]),
array([ 0., 0., 0., 0.])], dtype=object),
array([array([ 0., 0., 0., 0.]), array([ 0., 0., 0., 0.])], dtype=object),
array([array([ 0., 0., 0., 0.]), array([ 0., 0., 0., 0.])], dtype=object)], dtype=object)
In [29]: A1.shape
Out[29]: (3,)
In [30]: A1[0].shape
Out[30]: (3,)
In [31]: A1[0][0].shape
Out[31]: (4,)
所以S1真的是重複的信息,因爲'S1 == LEN(S2)' – trincot