【问题标题】:What is row major and column major in numpy?numpy 中的行专业和列专业是什么?
【发布时间】:2023-03-18 07:56:01
【问题描述】:

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

【问题讨论】:

标签: python numpy row-major-order


【解决方案1】:

考虑这样一个数组:

>>> 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

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 值)。转置后的数组提供了原始数组数据的视图,而不是副本,它以显示为主要列的方式跨步(内存中的实际数据保持相同的顺序):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多