我在试图使用带有zip功能的四个列表时遇到了一些麻烦。
特别是,我在第36行遇到以下错误:
TypeError: zip argument #3 must support iteration
我已经读过它不是可迭代的对象,但我在两个列表中使用它!如果我尝试仅在前2个列表上使用zip,它可以完美地工作:我只有最后两个问题。 有人有关于如何解决这个问题的想法?非常感谢!
import numpy
#setting initial values
R = 330
C = 0.1
f_T = 1/(2*numpy.pi*R*C)
w_T = 2*numpy.pi*f_T
n = 10
T = 1
w = (2*numpy.pi)/T
t = numpy.linspace(-2, 2, 100)
#making the lists c_k, w_k, a_k, phi_k
c_karray = []
w_karray = []
A_karray = []
phi_karray = []
#populating the lists
for k in range(1, n, 2):
c_k = 2/(k*numpy.pi)
w_k = k*w
A_k = 1/(numpy.sqrt(1+(w_k)**2))
phi_k = numpy.arctan(-w_k)
c_karray.append(c_k)
w_karray.append(w_k)
A_karray.append(A_k)
phi_karray.append(phi_k)
#making the function w(t)
w = []
#doing the sum for each t and populate w(t)
for i in t:
w_i = ([(A_k*c_k*numpy.sin(w_k*i+phi_k)) for c_k, w_k, A_k, phi_k in zip(c_karray, w_karray, A_k, phi_k)])
w.append(sum(w_i)
答案 0 :(得分:0)
我相信你想要zip(c_karray, w_karray, A_karray, phi_karray)
。另外,您应该生成一次,而不是for
循环的每次迭代。
此外,您并未真正使用numpy
。试试这个而不是你的循环。
d = numpy.arange(1, n, 2)
c_karray = 2/(d*numpy.pi)
w_karray = d*w
A_karray = 1/(numpy.sqrt(1+(w_karray)**2))
phi_karray = numpy.arctan(-w_karray)
w = (A_karray*c_karray*numpy.sin(w_karray*t[:,None]+phi_karray)).sum(axis=-1)
答案 1 :(得分:0)
您可能错误地输入了zip
中的最后两个元素。它们应为A_karray
和phi_karray
,因为phi_k
和A_k
是单个值。
w
的结果是:
[-0.11741034896740517,
-0.099189027720991918,
-0.073206290274556718,
...
-0.089754003567358978,
-0.10828235682188027,
-0.1174103489674052]
HTH,
德语。