【发布时间】:2019-07-21 14:48:23
【问题描述】:
请注意,我使用的是 Matlab R2013b。所以,我有一个 10x2 大小的玩具输入矩阵:
inputM = [NaN 4 7 NaN 9 NaN NaN NaN NaN NaN; NaN NaN 8 10 2 NaN 3 NaN NaN NaN]
我有非NaN值位于每列的最低和最高位置:
lowest_idx = [2 3]
highest_idx = [5 7]
我想根据移动索引shift_idx = [3 2] 在最低和最高位置之间向下移动批量行。我需要获得的输出矩阵看起来像
outputM = [NaN NaN NaN NaN 4 7 NaN 9 NaN NaN; NaN NaN NaN NaN 8 10 2 NaN 3 NaN]
我可以像这样使用for loop 来做到这一点:
for i = 1:length(shift_idx)
inputM(lowest_idx(i)+shift_idx(i):highest_idx(i)+shift_idx)(i),i) = inputM(lowest_idx(i):highest_idx(i),i);
inputM(1:lowest_idx(i)+1,i) = nan;
end
但是,我的真实矩阵有超过 100 万列,所以我想要一个更有效的解决方案。任何人都知道如何在没有for loop 的情况下做到这一点?
【问题讨论】: