矩阵索引交织

时间:2019-03-06 18:07:18

标签: matlab matrix

我熟悉Matlab中的矩阵索引,但是这种特定的语法使我有些困惑。例如,a = [1 2 3 4 5 6 7 8 9 10]b = [2 4 6 8 10 1 3 5 7 9]。我意识到a(b)将等于矩阵b,但是当我执行a(b) = a时就会出现问题。该语法产生矩阵[6 1 7 2 8 3 9 4 10 5]。我确定那里确实缺少一种模式,但是我花了很长时间才注意到这一点。到底发生了什么,我想念什么?

1 个答案:

答案 0 :(得分:1)

a(b) = a行正在ba的元素上执行vectorized indexing操作(要求它们具有相同数量的元素)。为了更好地了解其功能,以下是使用for循环完成的等效非矢量化操作:

c = a;  % Store original to work from
for index = 1:numel(b)
  a(b(index)) = c(index);
end

因此,元素a(b(1))(或第二元素a(2))被分配了元素a(1)(或a(b(2)),第四元素a(4)元素)被分配了a(2)中的值,依此类推。这等效于对索引向量b的元素进行排序,然后对a应用相同的排序排列。对于给定的向量b,这会将a的前半部分的元素放在偶数索引位置,并将a的后半部分的元素放在奇数索引位置。