numpy中的行专业和列专业是什么?
What is row major and column major in numpy?
我是 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
而 column-major 存储看起来像这样:
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 值)。转置数组提供了原始数组数据的视图,而不是副本,它 strided 以一种显示主列的方式(内存中的实际数据保持相同顺序):
>>> A.T[0].__array_interface__['data']
(14502656, False)
>>> A.T[1].__array_interface__['data']
(14502664, False) # 14502664 - 14502656 == 8
我是 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
而 column-major 存储看起来像这样:
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 值)。转置数组提供了原始数组数据的视图,而不是副本,它 strided 以一种显示主列的方式(内存中的实际数据保持相同顺序):
>>> A.T[0].__array_interface__['data']
(14502656, False)
>>> A.T[1].__array_interface__['data']
(14502664, False) # 14502664 - 14502656 == 8