Python 编写一个输入为数组的函数…';int';对象没有属性'__获取项目';

Python 编写一个输入为数组的函数…';int';对象没有属性'__获取项目';,python,magic-methods,Python,Magic Methods,我是python的初学者。我编写了一个函数,如下所示: 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-bet

我是python的初学者。我编写了一个函数,如下所示:

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__'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
交叉([4,5],[5,4])
文件“C:\Python27\crossover.py”,第11行,在crossover中
v1n[0,0]=(1-β)*v1[0]+β*v2[0]
TypeError:“int”对象没有属性“\uuuu getitem\uuuu”

您的代码在python 2.7.8(在我的计算机上)上运行良好。但我认为你的产出不好。 如果运行代码,则会得到输出:

(array([[ 4.91965332, 5. , 0. ]]), array([[ 4.08034668, 4. , 0. ]]))
这实际上是一个具有两个数组的元组,每个数组包含一个列表。 您正在对小型“数组”使用numpy,这实际上比普通列表慢。 numpy用于数百甚至数千个数据

我建议你用列表代替

让我给你举个例子,如果没有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")

您的代码似乎正在我的终端上运行。你确定你已经提供了你正在使用的确切代码吗?你的代码运行良好,你确定你已经发布了正确的代码吗?如果你需要python的帮助,请快速注意。我是Facebook上“Python编程语言”小组的成员。我们回答问题,比赛等等。特别欢迎新成员(: