在矩阵python中存储for循环的所有输出

时间:2015-03-06 05:42:09

标签: python arrays for-loop numpy matrix

from __future__ import division   
from math import *
import cmath   
import numpy as np

taup=3
eps = 0.000001;
i = 0;
del1 = 2*taup/150.;
x=[]
for tau in np.arange(-taup,taup,del1):
    i = i + 1;
    j = 0;
    fd = np.linspace(-5/taup,5/taup,151);
    val1 = 1. - abs(tau) / taup;
    val2 = pi * taup * (1.0 - abs(tau) / taup) * fd;
    x=np.hstack(abs( val1 * np.sin(val2+eps)/(val2+eps)))

我得到的输出x只是最后一次迭代输出,即1x151。 但我希望所有的迭代都存储在一个矩阵中(这里它将是151x151)。 我无法正确获得最后一行。

1 个答案:

答案 0 :(得分:0)

您可以将1D数组追加到x,然后追加vstack

    ...
    x.append(np.hstack(abs( val1 * np.sin(val2+eps)/(val2+eps))))

x = np.vstack(x)

或者,预先创建结果数组可以更快:

taus = np.arange(-taup,taup,del1)
fd = np.linspace(-5/taup,5/taup,151);
x = np.empty((taus.size, fd.size))
for tau_i, tau in enumerate(taus):
# or: 
# for tau_i in range(taus.size):
#     tau = taus[tau_i]
    i = i + 1;
    j = 0;

    val1 = 1. - abs(tau) / taup;
    val2 = pi * taup * (1.0 - abs(tau) / taup) * fd;
    x[tau_i] = np.hstack(abs( val1 * np.sin(val2+eps)/(val2+eps)))

P.S。事实上,这个代码可以在没有任何for周期的情况下编写,只是在数组操作方面。这是你的练习。