python - numpy 中的行专业和列专业是什么?

标签 python numpy row-major-order

我是 numpy 的新手,我正在阅读 numpy,但我无法理解 numpy 中的行专业和列专业,有人可以用最简单的方法举例解释吗?任何答案将不胜感激,谢谢

最佳答案

考虑一个像这样的数组:

>>> A = np.random.randint(low=1, high=9, size=(3,3))
>>> A   
array([[8, 7, 2],
       [4, 2, 5],
       [8, 6, 7]])

使用行优先意味着值将像这样存储在内存中(假设为 64 位整数):

Memory address  0x00  0x08  0x10  0x18  0x20  0x28  0x30  0x38  0x40
Value              8     7     2     4     2     5     8     6     7

列主存储看起来像这样:

Memory address  0x00  0x08  0x10  0x18  0x20  0x28  0x30  0x38  0x40
Value              8     4     8     7     2     6     2     5     7

Numpy 默认按行优先顺序存储。

>>> A[0].__array_interface__['data']
(14502656, False)
>>> A[1].__array_interface__['data']
(14502680, False)  # 14502680 - 14502656 == 24

您可以看到第二行数据距离第一行数据有 24 个字节(相当于三个 int64)。转置数组提供了原始数组数据的 View ,而不是副本,它以列主的方式跨步(内存中的实际数据保持相同的顺序):

>>> A.T[0].__array_interface__['data']
(14502656, False)
>>> A.T[1].__array_interface__['data']
(14502664, False)  # 14502664 - 14502656 == 8

关于python - numpy 中的行专业和列专业是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58437029/

相关文章:

python - `mid = low + (high -low)//2` 比 `(low + high)//2` 有什么好处?

python - numpy 向量化并行更新

python - python中返回多维列表元素的函数

python - 是什么导致 numpy 中 C 有序数组与 F 有序数组沿轴的数组总和不同

Python OpenCV线条检测检测图像中的 `X`符号

Windows 上的 Python select.select() 错误 10022

python - 使用Python unicode的特殊字符问题

python - 计算 Numba 中 numpy 数组中非零值的数量

arrays - 在 MATLAB 中,对于二维数组,如何获取首先迭代另一个维度的索引