2014-10-19 69 views
-1

我是一名Python初学者。我写了一个函数如下:用数组的输入写一个函数...'int'对象没有属性'__getitem__'

import numpy as np 

def crossover(v1,v2): 

    N=2 
    v1n=np.zeros(shape=(1,N+1)) 
    v2n=np.zeros(shape=(1,N+1)) 
    beta=np.random.rand(1) 

    v1n[0,0]=(1-beta)*v1[0]+beta*v2[0] 
    v1n[0][1]=v1[1] 
    v2n[0][0]=(1-beta)*v2[0]+beta*v1[0] 
    v2n[0][1]=v2[1] 

    return (v1n,v2n) 

时,我想看看交叉([3,4],[7,8]),以下错误....:

Traceback (most recent call last): 

    File "<pyshell#82>", line 1, in <module> 

    crossover([4,5],[5,4]) 

    File "C:\Python27\crossover.py", line 11, in crossover 

    v1n[0,0]=(1-beta)*v1[0]+beta*v2[0] 

TypeError: 'int' object has no attribute '__getitem__' 
+0

您的代码似乎是我的终端上运行。你确定你已经提供了你正在使用的确切代码吗? – Korem 2014-10-19 09:36:11

+1

您的代码在发布时运行良好,您确定您发布了正确的代码吗? – 2014-10-19 09:37:11

回答

0

你代码在python 2.7.8上运行正常(在我的电脑上)。但我建议你的输出不好。 如果你运行你的代码,你得到的输出:

(array([[ 4.91965332, 5. , 0. ]]), array([[ 4.08034668, 4. , 0. ]])) 

这实际上是包含每一个列表两个数组的元组。 你正在使用numpy的小'阵列',这实际上比普通列表慢。 numpy用于数百甚至数千数据。

check this link for more info about numpy speed

我会建议你只使用列表,而不是。

让我给你我怎么会做它没有numpy的一个例子:d

import random 

v1=[5,4] 
v2=[4,5] 

# basicly random number from 0 to 1 
beta=random.random() 

# let's initialize v1n and v2n (: 
v1n = [0,0,0] 
v2n = [0,0,0] 

v1n[0] = (1-beta)*v1[0]+beta*v2[0] 
v1n[1] = v1[1] 

v2n[0] = (1-beta)*v2[0]+beta*v1[0] 
v2n[1]=v2[1] 

print("first 3d array:") 
print(v1n) 

print("second 3d array:") 
print(v2n) 

print("note that this really is 2d arrays because the 3rd dimension is always zero") 
+0

快速注意,如果你需要帮助与蟒蛇。我是Facebook上的“Python编程语言”组的成员。我们回答问题,比赛和东西。新成员特别受欢迎(: – 2014-10-19 13:29:44

相关问题