import math as m
import numpy as np
i = np.mgrid[1:21:1]
N = [1,1,0]
def G1(i):
H1 = i**2
H2 = 2*H1
return H2
def G2(i):
H1 = i**3
H2 = 3*H1
return H2
def G3(i):
H1 = i**4
H2 = 4*H1
return H2
Gc = []
for a in xrange(1,21):
K1 = [G1(i)[i[a]], G2(i)[i[a]], G3(i)[i[a]]]
K2 = np.multiply(N,K1)
K3 = m.fsum(K2)
Gc.extend(K3)
返回错误:
TypeError:'float'对象不可迭代
我只想创建一个与Gc
大小相同的i
数组,其中每个元素都是i
的函数。
答案 0 :(得分:1)
你的问题很模糊。如果不了解理解的细节并提出解决方案,我会尝试解决我在代码中看到的问题
Gc.extend([K3])
。K1 = [G1(i)[i[a]], G2(i)[i[a]], G3(i)[i[a]]]
的IndexError。当a = 19时,i[a]
将为'20',但i的长度和G(i)为20.所以你还需要适当地纠正它。 编辑* * *在尝试从您的程序和结语语句中理解后,我提出了这个解决方案
for a in xrange(0,20):
GCArray=[G1,G2,G3] #Array of Functions
# You can also do [g(i[a]) for g in [G1,G2,G3]]
K1 = [g(i[a]) for g in GCArray] #Apply ath i to all the functions
K2 = np.multiply(N,K1) #Rest Similar to yours
K3 = m.fsum(K2)
Gc.extend([K3])
答案 1 :(得分:0)
Gc.extend(K3)
会返回float
,而非list
。 Gc.extend
需要list
,而不是float
。您最有可能想要使用Gc.append(K3)
,因为它需要标量而不是list
。
答案 2 :(得分:0)
您可以使用map
功能(内置)或列表理解来执行此操作。
例如,假设您要将函数foo()
应用于整个项目列表(i
),您可以编写:
Gc = map(foo,i)
或
Gc = [foo(x) for x in i]
这将为您提供一个列表Gc
,如下所示:
[foo(i[1]), foo(i[2]), ... , foo(i[n])]
这两种方法都可以用于多个参数的函数,即:
def foo(a,b):
return a*b**a
Gc = map(foo,i,q) # i and q are lists of equal length
或
Gc = [foo(i,x) for i,x in enumerate(i)]