我试着写下面的代码:
def ordering(n):
eqvec=np.zeros(n)
bvec=[]
for i in range(n):
eqvec[i]=orderingeq(n,i+1)
while eqvec:
index_max=np.argmax(eqvec)
bvec.append(index_max)
eqvec.remove(index_max)
return bvec
在这段代码中我有两个向量。第一个向量'eqvec'包含一些由方程'orderingeq'确定的数字。从这一点上,我需要用向量'eqvec'的最大值的索引值填充向量'bvec'。从我在网上找到的东西来看,这应该是可行的,或者至少我没有找到另一种方法来做到这一点。但是我得到了与'while eqvec:'行相对应的错误信息。
包含多个元素的数组的真值是二义性的。使用a.a any()或a.a all()
有没有人可以帮助我,告诉我我的代码有什么问题,也许告诉我应该怎么做?
这是检查numpy数组是否为空的正确方法。试一试:
while eqvec.size != 0:
请注意,如果eqvec
是一个列表而不是numpy数组,这将不起作用!
我想bvec = np.flip(np.argsort(eqvec))
会给你你所需要的。np.argsort(eqvec)
会给你一个索引位置的数组,从最小到最大,然后np.flip
会反转索引位置,所以你的最大元素的位置是第一,第二大元素的位置是第二,等等。
如果你希望结果是一个列表,那么你可以把它传递给list
。