[英]Creating 3D Array in Python
我試圖通過用 2D 數組填充它來在 Python 中形成一個 3D 數組。 N 是一個數字,取決於正在讀取的文件。 矩陣正在形成 3D,但當我期望它有 N 層時,它似乎只有 1 個“層”。 似乎 N 個“層”沒有被傳遞到形成的數組中。
import numpy as np
#'rot' is a 3D matrix of shape (N,3,3)
a=np.array(rot[:,0,0])
b=np.array(rot[:,0,1])
c=np.array(rot[:,0,2])
d=np.array(rot[:,1,0])
e=np.array(rot[:,1,1])
f=np.array(rot[:,1,2])
g=np.array(rot[:,2,0])
h=np.array(rot[:,2,1])
i=np.array(rot[:,2,2])
print(a.shape)
#(N,)
#Forming 3D array
arr=np.array([[[a,b,1],
[d,e,1],
[g,h,i]]])
print(arr.shape)
#(1,3,3)
您沒有確切說明您期望的形狀。 下面的代碼將返回一個形狀為(3, 3, N)
的 3D 數組
ones_vec = np.array([1] * N)
arr = np.array([[a, b, ones_vec],
[d, e, ones_vec],
[g, h, h]])
print(arr.shape)
# (3, 3, N)
讓我們簡化一下案例,看看實際結果,而不僅僅是形狀。
In [327]: a=np.arange(4)
僅從這個數組(或其他類似的數組)創建一個數組
In [328]: np.array([[[a,a],[a,a]]])
Out[328]:
array([[[[0, 1, 2, 3],
[0, 1, 2, 3]],
[[0, 1, 2, 3],
[0, 1, 2, 3]]]])
In [329]: _.shape
Out[329]: (1, 2, 2, 4)
注意 shape 和 dtype(int like a
)。 但是當我們在混合中添加標量1
:
In [330]: np.array([[[a,a,1],[a,a,1]]])
Out[330]:
array([[[array([0, 1, 2, 3]), array([0, 1, 2, 3]), 1],
[array([0, 1, 2, 3]), array([0, 1, 2, 3]), 1]]], dtype=object)
In [331]: _.shape
Out[331]: (1, 2, 3)
dtype 已更改。 它現在是數組和標量元素的混合體。
用匹配a
的數組替換標量:
In [332]: ones=np.ones_like(a)
In [333]: ones
Out[333]: array([1, 1, 1, 1])
In [334]: np.array([[[a,a,ones],[a,a,ones]]])
Out[334]:
array([[[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]],
[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]]]])
In [335]: _.shape
Out[335]: (1, 2, 3, 4)
並且沒有 [] 的外層
In [356]: np.array([[a,a,ones],[a,a,ones]])
Out[356]:
array([[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]],
[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]]])
In [357]: _.shape
Out[357]: (2, 3, 4)
如果你想要N
(這里是 4)維,你可以轉置
arr.transpose(2,0,1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.