You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3D/4D数组在列主序、行主序下的内存存储(MATLAB/NumPy)

高维数组内存存储细节解答

示例代码

NumPy代码

import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = np.array([[10,20,30],[40,50,60],[70,80,90]])
arr3D = np.array([A,B])

MATLAB代码

A = [1 2 3;4 5 6; 7 8  9];
B = [10 20 30;40 50 60; 70 80  90];
arr3D(:,:,1) = A;
arr3D(:,:,2) = B;

1. 3D数组列主序存储序列

列主序(MATLAB默认存储方式)的核心规则:最右侧维度变化最慢,最左侧维度变化最快。对于示例中MATLAB定义的3×3×2(行×列×页)的3D数组,遍历顺序为:先遍历同一列的所有行,再切换到下一列,全部列遍历完成后再切换到下一页。

对应arr3D的内存存储序列为:
|1|4|7|2|5|8|3|6|9|10|40|70|20|50|80|30|60|90|

具体遍历逻辑:

  • 第1页(矩阵A):先取第1列所有元素 1,4,7,再取第2列 2,5,8,最后取第3列 3,6,9
  • 第2页(矩阵B):先取第1列所有元素 10,40,70,再取第2列 20,50,80,最后取第3列 30,60,90

2. 4D数组行主序存储序列

行主序(NumPy默认存储方式)的核心规则:最左侧维度变化最慢,最右侧维度变化最快。将arr3D与元素为其2倍的arr3D2拼接后,得到的4D数组维度为2×3×3×2(矩阵个数×行×列→原数组/2倍数组)。

按照行主序规则,存储时先固定前三个维度(矩阵、行、列),遍历第四个维度的两个元素(原数组值、2倍值),完成当前位置后依次切换列、行、矩阵。

对应4D数组的内存存储序列为:
|1|2|2|4|3|6|4|8|5|10|6|12|7|14|8|16|9|18|10|20|20|40|30|60|40|80|50|100|60|120|70|140|80|160|90|180|

具体遍历逻辑:

  • 第1个矩阵(A)的每个元素依次取原值和2倍值:
    • 行1列1:1,2;行1列2:2,4;行1列3:3,6
    • 行2列1:4,8;行2列2:5,10;行2列3:6,12
    • 行3列1:7,14;行3列2:8,16;行3列3:9,18
  • 第2个矩阵(B)的每个元素依次取原值和2倍值:
    • 行1列1:10,20;行1列2:20,40;行1列3:30,60
    • 行2列1:40,80;行2列2:50,100;行2列3:60,120
    • 行3列1:70,140;行3列2:80,160;行3列3:90,180

内容的提问来源于stack exchange,提问作者Ardy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:02:08