繁体   English   中英

八度:我如何向量化此lop?

[英]Octave: How can I vectorize this for-lop?

可以将此for循环向量化吗? 我希望能够向量化此代码的for循环以获得类似“ sample”的矩阵。 尝试向量化时,我得到了“ sample2”矩阵,但是正如您看到的那样,当我将“数据”作为矩阵而不是向量时,由于线性索引,它没有显示我想要的每一行的值。

close all; clear all; clc;
N=5; n=10; n1=2; n2=8;
rand('state', sum(100*clock));  
choose=round(((n-1)*rand(N,n))+1);
data=choose.^2;
idx=choose(:,n1:n2);
for i=1:N
dat=data(i,:); 
sample(i,:)=dat(idx(i,:));
end

%Trying to vectorize to get the same result
sample2(:,(n1:n2)-n1+1)=data(idx);

结果:

data =
36    64    64    25    81     4   100    36    49    25
 4     4     1    16     4    16    81    16   100    64
36    81    36    25    16    16     1    64    49     4
36    64    49    49    25    36   100    64    81    64
 1    16    16    49    64    49    81     4    16    64

idx =
8    8    5    9    2   10    6
2    1    4    2    4    9    4
9    6    5    4    4    1    8
8    7    7    5    6   10    8
4    4    7    8    7    9    2

sample =
36    36    81    49    64    25     4
 4     4    16     4    16   100    16
49    16    16    25    25    36    64
64   100   100    25    36    64    64
49    49    81     4    81    16    16

sample2 =
81   81    1   64    4   16   64
4    36   36    4   36   64   36
64   64    1   36   36   36   81
81    4    4    1   64   16   81
36   36    4   81    4   64    4

看起来您正在尝试索引专业行。 但是八度索引列专业。 您可以转置您的输入以得到正确的指数。 另外,如果要索引到第二列,则只需添加第一列的长度即可。

尝试这个:

data2 = data';
sample2 = data2([idx + [0:size(idx,1)-1]'*size(data,2)])

第一行只是转置矩阵,所以您将得到原始行的索引。

第二行通过添加原始数据行的长度,将索引矩阵修改为总索引,而不是行索引,然后引用数据以提供结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM