MATLAB:使用整数数组索引数组

时间:2014-05-14 14:49:38

标签: arrays matlab matrix-indexing

MATLAB允许使用其他数组索引数组。

通常结果大小相同,但显然情况并非如此。

必须与MATLAB中的“列优先级”相关。

问题:

我想知道如何在

中找到如何获得[1 1]的一致解决方案

size(index_array)==size(array(index_array)) 所有尺寸的index_array

具体来说,我发布了一个示例脚本:

baseAlt = [ 0, 11000, 20000, 32000, 47000, 51000, 71000 ];

xRow = 10000*[ 1, 2, 3, 4, 5];
xCol = 10000*[ 1; 2; 3; 4; 5];
 xSq = 20000* rand(5);

reg = arrayfun( @(alt) sum(alt>=baseAlt), xRow);
ans1 = baseAlt(reg);
disp(all(size(baseAlt(reg))==size(reg))); %ans=2

reg = arrayfun( @(alt) sum(alt>=baseAlt), xSq);
ans2 = baseAlt(reg);
disp(all(size(baseAlt(reg))==size(reg))); % ans=2

%BUUUUT
reg = arrayfun( @(alt) sum(alt>=baseAlt), xCol);
ans3 = baseAlt(reg);
disp(all(size(baseAlt(reg))==size(reg)));       % row, instead of column
                                                % zero when comparing size
%MOREOVER
reg = arrayfun( @(alt) sum(alt>=baseAlt), xCol);
ans4 = baseAlt([reg,reg]);
disp(all(size(baseAlt([reg,reg]))==size([reg,reg])));  % we get true here

如您所见,所有矩阵都保留了索引矩阵的形状, APART 来自 ROW被COL 索引的情况。有人可以解释这个吗?

编辑1:使用“全部”而不是“总和”,正如达尼指出的那样,这里更加强大。

1 个答案:

答案 0 :(得分:0)

我不知道索引是否以您展示的方式工作(特别是矩阵索引向量)。我没有在Matlab文档中首先看到这一点。

你的第三个例子不起作用的原因是因为Matlab将索引向量解释为线性索引(无论是行向量还是列向量都是无关紧要的)。

您可以使用此小型匿名函数轻松实现所需的行为:

arrayIndexing = @(ar, ind)arrayfun(@(x)ar(x),ind);

使用您的示例代码(用于快速测试):

baseAlt = [ 0, 11000, 20000, 32000, 47000, 51000, 71000 ];
xRow = 10000*[ 1, 2, 3, 4, 5];
xCol = 10000*[ 1; 2; 3; 4; 5];
xSq = 20000* rand(5);
arrayIndexing = @(ar, ind)arrayfun(@(x)ar(x),ind);
reg = arrayfun( @(alt) sum(alt>=baseAlt), xSq);
result = arrayIndexing(baseAlt,reg);
disp(all(size(result)==size(reg))); % ans=1
reg = arrayfun( @(alt) sum(alt>=baseAlt), xCol);
result = arrayIndexing(baseAlt,reg);
disp(all(size(result)==size(reg)));  % ans=1

这适用于索引向量/数组的任何格式。

请注意使用all代替sum,我认为这是更合适的功能。