簡體   English   中英

Matlab:如何在矩陣中獨立移動列?

[英]Matlab: How can I shift columns independently in a matrix?

我有一個10X3的矩陣,我想只使用每一列的一個子集來創建一個新的矩陣,但是我希望基於索引數組和從該點開始的定義范圍,每一列的子集都不同。

例如,如果矩陣是(當我這樣做時,數字實際上不會以這種線性方式上升):

A = ...
   [1   11  21
    2   12  22
    3   13  23
    4   14  24
    5   15  25
    6   16  26
    7   17  27
    8   18  28
    9   19  29
    10  20  30]

並且索引數組是pos = [5,16,24] ,擴展范圍為+/- 3(因此每個索引單元的兩側有3個單元),那么我希望新矩陣為:

2   13  21
3   14  22
4   15  23
5   16  24
6   17  25
7   18  26
8   19  27

因此,在新矩陣中,索引數組引用的所有值都應對齊。

我實際上是使用更大的矩陣(最大400X100)來執行此操作的,所以我不確定循環是否是個好主意……。

感謝您的任何想法!

shift          = 3;

% Prevent out of bounds
bread          = NaN(shift,size(A,2));
A              = [bread;A;bread] 
pos            = pos+shift;

% Create mask
B              = zeros(size(A));
B(pos-shift)   = 1;
B(pos+shift+1) = -1;
B              = logical(cumsum(B));

% Select and reshape
reshape(A(B),shift*2+1,numel(pos))

您可以使用

r = 3;
B = A(bsxfun(@plus, pos, (-r:r)'));

這是使用arrayfun的方法:

r = 3; % Spread range
B = arrayfun(@(x) A(x-r:x+r)', pos, 'UniformOutput', false);

B將是一個單元格,但是,您可以使用以下矩陣: [B{:}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM