Python 加速此代码段

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

我正在将一段代码从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: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))
超快速。精彩:)谢谢