{site_name}

{site_name}

🌜 搜索

在Python中,形状(shape)、步幅(stride)和子偏移量(suboffsets)是与多维数组相关的概念

Python 𝄐 0
python偏移量没看懂,python步长值,python步长为负数,python中的偏移量,python中步长,python步长为-1
在Python中,形状(shape)、步幅(stride)和子偏移量(suboffsets)是与多维数组相关的概念。

1. 形状(shape):表示多维数组每个维度的大小,以元组形式表示。例如,一个形状为(3, 4)的二维数组表示该数组有3行4列。

示例:

python
import numpy as np

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

print("Array shape:", arr.shape)
# Output: Array shape: (3, 4)


2. 步幅(stride):表示在内存中遍历数组时需要跳过的字节数,以元组形式表示。对于一个形状为(shape_0, shape_1, ..., shape_n-1)的n维数组,其步幅为(stride_0, stride_1, ..., stride_n-1)。其中,stride_i表示沿第i个轴遍历时需要跳过的字节数。

示例:

python
import numpy as np

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

print("Array strides:", arr.strides)
# Output: Array strides: (16, 4)


上面的输出结果表示,在遍历该数组时,需要先跳过16个字节才能访问下一行(即第一个维度),在同一行上,则只需要跳过4个字节。

3. 子偏移量(suboffsets):是指数组中某个元素相对于其所在的多维数组的起始地址,所需要的额外偏移量。通常情况下,子偏移量为0,即数组元素刚好位于数组起始地址处。但是,在一些特殊情况下,例如复合数据类型或非连续的数组,子偏移量可能不为0。

示例:

python
import numpy as np

arr = np.zeros((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])

print("Array suboffsets:", arr.__array_interface__['descr'][0][1])
# Output: Array suboffsets: [0, 4]


上面的输出结果表示,dtype为[('x', 'i4'), ('y', 'i4')]的二维数组中,元素x和元素y分别占据4个字节,并且元素y相对于数组起始地址要向后偏移4个字节。