我正在尝试设置一些代码来提取矩阵的某些元素,并按照提取的顺序将这些值仅保留在另一个矩阵中。
示例:如果我有一个随机1X20矩阵,但只想要从4和5开始的每个Nth = 5th元素,我希望它构造一个仅包含4,5,9,10的新矩阵(1x8), 14,15,19,20。
到目前为止我所拥有的是:
r = rand(1,20);
n = 5;
a = r(4 : n : end);
b = r(5 : n : end);
因此,我不再使用两个单独的矩阵,而是按照原始的时间顺序想要一个矩阵(同样,1×8矩阵由4,5,9,10,14,15,19,20的元素组成) 。基本上,我希望能够为任意数量的值执行此操作,同时仍保持元素所在的原始顺序。
答案 0 :(得分:2)
为r
和4
开头的索引分别创建索引到5
的所有索引,然后对它们进行排序以保持元素的顺序({1} }。
所以,这应该有效 -
r
答案 1 :(得分:2)
针对可变数量的起始值的更通用的解决方案:
% example
A = 1:20;
% starting values and number of values to skip
a = [4,5];
n = 5;
% index vector
idx = bsxfun(@plus,a',(0:numel(A)/n-1)*n)
% indexing
result = A(idx(:))
返回:
idx(:)' = 4 5 9 10 14 15 19 20
另一个例子:
A = 1:40;
a = [3,4,7];
n = 10;
idx = bsxfun(@plus,a',(0:numel(A)/n-1)*n)
返回:
idx(:)' = 3 4 7 13 14 17 23 24 27 33 34 37
答案 2 :(得分:1)