2014-10-19 28 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

相關問題