了解numpy轴

时间:2019-03-28 15:55:22

标签: python numpy

这就是我所想的轴,想知道我的理解是否正确

我们从[的左侧算起左括号0,这就是axis

eg1)[[1,2],[3,4]]

对于[,查找所有剩下一个[的元素,它们都是轴0的元素。([[代表轴1,依此类推)

0 axis: you see `[`: [x, y] where x = [1,2], y=[3,4]
1 axis: you see `[[`: [[x, y]] where x = [1,3], y = [2,4]

eg2)[[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]

0 axis: you see `[` [x, y] where x = [[1,2,3], [4,5,6]], y= [[7,8,9], [10,11,12]]
1 axis: you see `[[`,  x = [1,2,3], [7,8,9] y = [4,5,6], [10,11,12]
2 axis: you see `[[[`, x = [1,4,7,10] y = [2,5,8,11] z = [3,6,9,12]

如果有一个函数沿轴取一个值,我可以验证我是否正确,但是.. 我发现最接近的东西是np.take

1 个答案:

答案 0 :(得分:0)

对于(2,2)形状数组:

In [13]: arr = np.array([[1,2],[3,4]])                                          
In [14]: arr                                                                    
Out[14]: 
array([[1, 2],
       [3, 4]])

Python unpacking仅在数组上进行迭代-在第一个维度“行”上:

In [15]: x, y = arr                                                             
In [16]: x,y                                                                    
Out[16]: (array([1, 2]), array([3, 4]))

要解压缩列,我们可以转置数组,因此第二维为第一维。但是我认为列表理解更清晰:

In [17]: x, y = [arr[:,i] for i in range(2)]                                    
In [18]: x,y                                                                    
Out[18]: (array([1, 3]), array([2, 4]))

对于3d数组:

In [19]: arr = np.arange(1,13).reshape(2,2,3)                                   
In [20]: arr                                                                    
Out[20]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

在第一个维度上进行迭代的结果应该很明显-2个块或窗格。

您正确地获得了第二维。对于第三个,结果是3(2,2)个数组:

In [21]: x,y,z=[arr[:,:,i] for i in range(arr.shape[2])]                        
In [22]: x                                                                      
Out[22]: 
array([[ 1,  4],
       [ 7, 10]])
In [23]: y                                                                      
Out[23]: 
array([[ 2,  5],
       [ 8, 11]])
In [24]: z                                                                      
Out[24]: 
array([[ 3,  6],
       [ 9, 12]])

x,y,z=也可以使用:

In [25]: arr.transpose(2,0,1)                                                   
Out[25]: 
array([[[ 1,  4],
        [ 7, 10]],

       [[ 2,  5],
        [ 8, 11]],

       [[ 3,  6],
        [ 9, 12]]])

np.take可以像我的索引一样使用:

[np.take(arr,i,2) for i in range(3)]