Python ndarray.strides用法

用法

ndarray.strides: 跨越数组各个维度所需要经过的字节数元组

a = np.array([[10,2,4],[3, 4,11]],dtype=np.int32)
print(a.strides) #(12,4)  12表示在内存中a[n, 0]到a[n+1, 0]跨过多少byte; 4表示在内存中a[n, 0]到a[n, 1]跨过多少byte

#  查看数组a所有元素占用内存大小,单位byte
print(a.nbytes) # 24 
# 查看数组a每个元素占用内存大小,单位byte
print(a.itemsize) # 4

print(a[:,1]) # [2 4]
print(a[:,1].strides) # (12,)
stride, = a[:,1].strides 
print(stride) # 12

数组a以24(6个值*4=24)个字节的形式存储在内存中,一个接一个(又称为连续内存块)。数组的步幅告诉我们要沿着某个轴移到下一个位置,我们必须在内存中跳过多少个字节。

解释:

基础:

  • 1byte = 8bit
  • 不同数据类型占据的内存大小不同,总的来说一个32位的类型需要4byte,64位的类型需要8byte,可参考下表
    | 数值 \ 数值类型 (单位:Byte) | int32 | int64 | float32 | float64 |
    |–|--|–|--|–|
    | [] | 96 | 96 | 96 | 96 |
    | 1 | 4 | 8 | 4 | 8 |
    表格意思:一个空的数组[]就占用内存96byte,因为它存放了关于数组大小等信息。32位的数组一个元素占用4byte,64的数组,一个元素占用8byte

计算规则:

  • 跨越第1维:从a[x,0]到a[x,1]经过4个字节(1个值)才能移至下一列
  • 跨越第0维:从a[0,x]到a[1,x]的话,需要经过12(3个值x4)个字节才能移至下一行中的相同位置,因为a[0],也就是a的一行有3个数据,占据12个字节
  • 因此数组a的步幅将为(12, 4)

示例

y = np.reshape(np.arange(2*3*4), (2,3,4))
print(y)
print(y.strides) # (48, 16, 4)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值