python数组维度怎么看_numpy数组维度理解终结版

写在前面

可能你会不相信,我是从玩pytorch中过来的,我觉得有必要记录一下,transpose这个坑还非踩不可,为了说的清楚一点儿,我多铺垫一点儿,先说说numpy数组维度的理解

引子

>>> a = np.arange(start=0, stop=24)

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,

17, 18, 19, 20, 21, 22, 23])

>>> a = a.reshape(4, 3, 2)

>>> # 老铁们猜一猜长啥样

>>> a

array([[[ 0, 1],

[ 2, 3],

[ 4, 5]],

[[ 6, 7],

[ 8, 9],

[10, 11]],

[[12, 13],

[14, 15],

[16, 17]],

[[18, 19],

[20, 21],

[22, 23]]])

>>> # 我猜你还没get到点

>>> a.shape

(4, 3, 2)

>>> # 我到底想说啥,还是一头雾水,对吧??哈哈

别揍我,关子卖的挺大,我到底想说啥呢??

可能多用来处理图片的缘故,咱们多用二维数组,二维数组array.shape返回的元组,[0]是有几行的意思(也就是数组所谓的宽),[1]是有几列的意思(也就是数组所谓的长)

而上面引例中,你可以把它理解为四通道的图片,而每一通道可以单独视作一张灰度图, 这样说应该没问题吧?(希望大家能理解),所以按照咱们之前在二维图片的理解,a.shape返回的元组应该有[0]是图片的宽(有几行),[1]是图片的长(有几列),[2]是图片的通道数

所以a.shape应该为:(3, 2, 4)即三行两列四通道

然而实际上,a.shape返回的元组是(4, 3, 2),该怎么理解呢??

我这里提出一种解释(只方便理解,也不知道对不对哈)

咱们初次看三维数组a

扒开它的第一层皮,看到了四个二维数组:

[[ 0, 1],

[ 2, 3],

[ 4, 5]],

[[ 6, 7],

[ 8, 9],

[10, 11]],

[[12, 13],

[14, 15],

[16, 17]],

[[18, 19],

[20, 21],

[22, 23]]

而你看到的4个二维数组所在的维度就是三维数组中所谓的第一维即shape[0]

取这4个二维数组中的第一个

把它的皮剥掉

[ 0, 1],

[ 2, 3],

[ 4, 5]

没错,我想说的就是,这3个一维数组所在的维度就是三维数组中所谓的第二维即shape[1]

咱有始有终,取这3个一维数组中的第一个

把它的皮剥掉,

0, 1

只剩下两个常数,嗯嗯,这俩常数就是三维数组中所谓的第三维即shape[2]

总结一下

看见高维度数组,不要慌,从外向里依次"剥皮",就分别是数组的第1, 2, 3......维度

下一篇博客写transpose函数

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
numpy数组元素周围的操作可以通过以下几种方式实现: 1. 切片操作:可以使用numpy数组的切片操作来获取数组中元素的周围元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下切片操作: ```python arr[i-1:i+2, j-1:j+2] ``` 这将返回一个3x3的子数组,其中心元素为arr[i,j],周围的8个元素为该子数组的其余元素。 2. 使用numpy.pad()函数:numpy.pad()函数可以用来在数组的边缘添加一个或多个值,从而扩展数组的大小。可以使用该函数来添加额外的行和列,然后通过索引访问周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python padded_arr = np.pad(arr, ((1, 1), (1, 1)), mode='constant') surrounding = padded_arr[i:i+3, j:j+3] ``` 这将在数组的边缘添加一行和一列,并使用常量值填充这些额外的元素。然后可以使用切片操作来获取中心元素周围的元素。 3. 使用numpy.roll()函数:numpy.roll()函数可以用来沿着给定轴滚动数组的元素。可以使用该函数来将数组的行和列进行滚动,从而获取周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python rows, cols = arr.shape row_indices = np.arange(i-1, i+2) % rows col_indices = np.arange(j-1, j+2) % cols surrounding = arr[row_indices][:, col_indices] ``` 这将将第i行向上和向下滚动一行,并将第j列向左和向右滚动一列,从而获取中心元素周围的元素。使用模运算可以确保在数组的边缘滚动时正确处理索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值