Python 加速此代码段
我正在将一段代码从Matlab重写为Python Matlab代码如下所示:Python 加速此代码段,python,matlab,Python,Matlab,我正在将一段代码从Matlab重写为Python Matlab代码如下所示: validIntSize = length(prices1)-125; %valid interval size interval720s = zeros(validIntSize,120+1); interval360s = zeros(validIntSize,60+1); interval180s = zeros(validIntSize,30+1); for i = 1:intJump:validIntSiz
validIntSize = length(prices1)-125; %valid interval size
interval720s = zeros(validIntSize,120+1);
interval360s = zeros(validIntSize,60+1);
interval180s = zeros(validIntSize,30+1);
for i = 1:intJump:validIntSize
interval180s(i,:) = [prices1(i:i+29),priceDiff(i+29)];
interval360s(i,:) = [prices1(i:i+59),priceDiff(i+59)];
interval720s(i,:) = [prices1(i:i+119),priceDiff(i+119)];
end
简而言之,它填充了这个巨大矩阵的行。我是通过Python中的append来实现的,这需要花费太长的时间:
intervals = []
for mean in self.means: intervals.append([])
for i in range(stop_point):
for idx, mean in enumerate(self.means):
intervals[idx].append(list(prices1[i:(i+mean)])+[price_diff[i+mean]])
我怀疑这是由于我使用的append方法造成的
另外,在Matlab中大约需要2秒,在Python中大约需要2分钟
p.p.S将我的代码更改为注释中建议的列表理解:
for idx, k_mean in enumerate(self.k_means):
intervals[idx] = [list(prices1[i:(i+k_mean)])+[price_diff[i+k_mean]] for i in range(stop_point)]
不会加速代码。如果你有你想要改进的工作代码,你应该考虑把这些问题放在相反的地方。列表理解能提高速度吗?它意味着将两个不同大小的矩阵相加。例如,将一个
[5 x 1]
矩阵添加到[5 x 5]
矩阵中,就像它使用MATLAB代码ii+(0:29)
那样。Numpy还可以做广播。解释如下:将numpy作为np导入;ii=np.arange(0,validIntSize,intJump)。重塑(-1,1);interval180s=np.hstack((prices1[ii+np.arange(0,30).重塑(1,-1)],pricesdiff[ii.重塑(1,-1)+29].重塑(-1,1))
超快速。精彩:)谢谢