嗨,我有一个大小为 [xyz] 的三维八度数组 A
现在我有另一个维度为 n * 3 的数组 B
假设 B(0) 给出 [3 3 1]
我需要访问 A 中的那个位置,即 A(3, 3, 1) = 说 15 类似于 A(B(0))
我该怎么做?
嗨,我有一个大小为 [xyz] 的三维八度数组 A
现在我有另一个维度为 n * 3 的数组 B
假设 B(0) 给出 [3 3 1]
我需要访问 A 中的那个位置,即 A(3, 3, 1) = 说 15 类似于 A(B(0))
我该怎么做?
请参阅sub2ind
( 和ind2sub
) 的帮助。但是,现在人们建议使用循环。
好吧,首先,B(0)
索引无效,因为 MATLAB 和 Octave 中的寻址从 1 开始。另一个问题是您希望它B(0)
包含一个 vector [3 3 1 ]
。MATLAB 中的矩阵不能包含其他矩阵,只能包含标量。所以你需要使用 3x3 元胞数组、3x3 结构或 4 维数组。我将在这里选择元胞数组选项,因为我发现它最简单、最方便。
% 设置随机种子(仅用于示例数据生成)。
rng(123456789);
% 让我们生成一些伪随机示例数据。
A = rand(3,3,3);
A(:,:,1) =
0.5328 0.7136 0.8839
0.5341 0.2570 0.1549
0.5096 0.7527 0.6705
A(:,:,2) =
0.6434 0.8185 0.2308
0.7236 0.0979 0.0123
0.7487 0.0036 0.3535
A(:,:,3) =
0.1853 0.8994 0.9803
0.7928 0.3154 0.5421
0.6122 0.4067 0.2423
% 生成一个示例 3x3x3 索引元胞数组,填充伪随机 1x3 索引向量。
CellArrayOfIndicesB = cellfun(@(x) randi(3,1,3), num2cell(zeros(3,3,3)), 'UniformOutput', false);
% 示例 #1。坐标 (1,2,3)。
Dim1 = 1;
Dim2 = 2;
Dim3 = 3;
% 直接获取A对应值的代码。
ValueOfA = A(CellArrayOfIndicesB{Dim1,Dim2,Dim3}(1), CellArrayOfIndicesB{Dim1,Dim2,Dim3}(2), CellArrayOfIndicesB{Dim1,Dim2,Dim3}(3));
ValueOfA =
0.8839
% 让我们首先检查 CellArrayOfIndicesB{1,2,3} 指向的位置来确认这一点。
CellArrayOfIndicesB{1,2,3}
ans =
[ 1 3 1 ]
%CellArrayOfIndicesB{1,2,3}
指向A(1,3,1)
。% 那么让我们看看 的值是多少A(1,3,1)
。
A(1,3,1)
ans =
0.8839
% 示例 #2。坐标 (3,1,2)。
Dim1 = 3;
Dim2 = 1;
Dim3 = 2;
ValueOfA = A(CellArrayOfIndicesB{Dim1,Dim2,Dim3}(1), CellArrayOfIndicesB{Dim1,Dim2,Dim3}(2), CellArrayOfIndicesB{Dim1,Dim2,Dim3}(3));
ValueOfA =
0.4067
CellArrayOfIndicesB{3,1,2}
ans =
[ 3 2 3 ]
A(3,2,3)
ans =
0.4067