数组gen的快速循环替代和MATLAB / Octave中的concat

时间:2014-05-07 18:08:58

标签: arrays performance matlab loops octave

我有一个包含值的大文件,我尝试使用这些值创建波形。

这需要太长时间,而且由于我不是Octave最好的,我认为可能还有另一种方法可以做到这一点。我正在寻找一种更快的替代方案,一种使用Octave的数组处理功能,而不是我做一个循环,我认为这很慢。

修改

csv是[1xn]数组。

csv = csvread('values.csv');

n = length(csv);

t = [0 : 1 / (freq * spc) : 1 / freq];
t = t(2 : length(t));

wave = csv(1) * sin(two_pi_freq * t);

for i = 2 : n

    wave = [wave (csv(i) * sin(two_pi_freq * t))];

endfor

1 个答案:

答案 0 :(得分:2)

根据最新评论编辑回答:

为避免任何for循环,您可以将两个向量相乘以获得一个数组,然后重新整形数组以将所有值排成一行。

您构建t的方式,它的维度为[1xm] (使用m=length(t)

对于维度[1xn]的csv向量,而不是循环,请使用:

%// generate an array size [nxm] by multiplying [nx1] * [1xm]
wave2 = csv.' * sin(two_pi_freq * t) ;    
wave2 = reshape( wave2.' , [] , length(t)*length(csv) ) ; %// reshape the array in one [1xm*n] line 

这应该替换你最后4行代码(wave的第一个定义和循环的3行。