我熟悉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]
。我确定那里确实缺少一种模式,但是我花了很长时间才注意到这一点。到底发生了什么,我想念什么?
答案 0 :(得分:1)
第a(b) = a
行正在b
和a
的元素上执行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
的后半部分的元素放在奇数索引位置。