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

时间:2019-10-17 16:25:03

标签: python numpy row-major-order

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

1 个答案:

答案 0 :(得分:2)

考虑这样的数组:

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

使用 row-major 意味着这些值将以这种方式存储在内存中(假定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值)。转置后的数组提供了对原始数组数据(而不是副本)的视图,该数据被添加,其显示方式为列主(内存中的实际数据保持相同的顺序):

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