将 for 循环的所有输出存储在矩阵中 python
Storing all the outputs of for loop in a matrix python
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)。
我无法正确获取最后一行
您可以将一维数组附加到 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
个循环来写,就数组操作而言。这是给你的练习。
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)。 我无法正确获取最后一行
您可以将一维数组附加到 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
个循环来写,就数组操作而言。这是给你的练习。