簡體   English   中英

在 Python 中創建 3D 數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM