numpy 拆分数组时,轴的意义是什么?

ar7v8xwq  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(81)

我无法理解轴向参数。我来解释这个问题。
代码:np.split(b1,[1,3],axis=0)
实验结果:

[array([[1, 2, 3, 4]]),
 array([[ 5,  6,  7,  8],
        [ 9, 10, 11, 12]]),
 array([[13, 14, 15, 16],
        [17, 18, 19, 20]])]

字符串
代码:np.split(b1,[1,3],axis=1)
实验结果:

[array([[ 1],
        [ 5],
        [ 9],
        [13],
        [17]]),
 array([[ 2,  3],
        [ 6,  7],
        [10, 11],
        [14, 15],
        [18, 19]]),
 array([[ 4],
        [ 8],
        [12],
        [16],
        [20]])]


当我看到这个想法“如果axis=0,则表示对行进行运算,如果axis=1,则表示对列进行运算”,然后代码:

v1=np.array([[26.50940987, 22.97569521, 22.85657049,  9.0536725 ],
       [25.98586589, 29.063503  , 16.32117152, 53.37755382],
       [23.57720158, 34.10171715, 24.7272822 , 26.84495276],
       [19.56007871, 43.61342762, 45.83942094, 16.36201912]])
v1=np.sort(v1,axis=0)
print(v1)


实验结果:

array([[19.56007871, 22.97569521, 16.32117152,  9.0536725 ],
       [23.57720158, 29.063503  , 22.85657049, 16.36201912],
       [25.98586589, 34.10171715, 24.7272822 , 26.84495276],
       [26.50940987, 43.61342762, 45.83942094, 53.37755382]])


按列排序?当它的轴=1时,它按行排序。为什么会这样?有什么我不明白的?

q9yhzks0

q9yhzks01#

由于只有2个维度,轴参数的“单词描述”可能是模糊的-至少在英语中是这样。我们是在轴上求和还是在轴上求和。有时看1d会有帮助,然后跳到3d(或更多)。然后,哪个轴消失了,哪个轴保留下来就更明显了。
np.sum也取一个轴;用keepdimstuple轴进行实验。
对于(5,4)阵列的分裂,轴0使得(1,4),(2,4),(2,4);而轴1是(5,1)、(5,2)、(5,1)。轴表示哪个维度被分割。这对我来说似乎很清楚,但可能是因为我已经用得够多了。
对于sort,轴0对行进行排序,但对每一列单独进行排序。'sort on column'是一个不明确的描述符。
总结一下,没有一种描述可以同样适用于所有情况。-
下面是sum的数组:

In [213]: arr = np.arange(1,21).reshape(5,4)
In [214]: arr
Out[214]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20]])

In [215]: arr.sum(axis=0)
Out[215]: array([45, 50, 55, 60])
In [216]: arr.sum(axis=0, keepdims=True)    # (4,) result
Out[216]: array([[45, 50, 55, 60]])    # (1,4) result
In [217]: arr.sum(axis=1, keepdims=True)
Out[217]: 
array([[10],
       [26],
       [42],
       [58],
       [74]])   # (1,5) result

字符串
创建一个3D数组:

In [218]: arr.reshape(5,2,2).sum(axis=0, keepdims=True)
Out[218]: 
array([[[45, 50],
        [55, 60]]])  # (1,2,2)
In [219]: arr.reshape(5,2,2).sum(axis=(1,2), keepdims=True)
Out[219]: 
array([[[10]],

       [[26]],

       [[42]],

       [[58]],

       [[74]]])  # (5,1,1)


返回到以轴0分割,用于3d阵列。size 5轴的相同1,2,2分割。

In [223]: [i.shape for i in np.split(arr.reshape(5,2,2),[1,3],axis=0)]
Out[223]: [(1, 2, 2), (2, 2, 2), (2, 2, 2)]

相关问题