1

嗨,我有一个大小为 [xyz] 的三维八度数组 A

现在我有另一个维度为 n * 3 的数组 B

假设 B(0) 给出 [3 3 1]

我需要访问 A 中的那个位置,即 A(3, 3, 1) = 说 15 类似于 A(B(0))

我该怎么做?

4

2 回答 2

0

请参阅sub2ind( 和ind2sub) 的帮助。但是,现在人们建议使用循环。

于 2012-04-17T19:19:52.507 回答
0

好吧,首先,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
于 2012-04-17T20:54:30.830 回答