我希望通过第一个inequal元素来命令一对向量。例如:
[0, 1, 2] < [0, 2, 1]
因为0 == 0所以看下一个索引,其中1&lt; 2。
有一种简单的方法可以在numpy中执行此操作吗?现在我用它来找到&#34;更大&#34;之间的区别。和&#34;较小的&#34;矢量,这导致我的第一次尝试,这是:
(x - y) * np.sign((x - y)[np.nonzero(x - y)[0][0]])
答案 0 :(得分:3)
您可以使用元组:(0,1,2)<(0,2,1)
。所以像
def cmp(v1, v2): return tuple(v1) < tuple(v2)
应该足够......
答案 1 :(得分:1)
np.lexsort
可能是最有效的方法:
import numpy as np
# an (N, k) array of N k-dimensional vectors
data = np.array([[0, 2, 3], [0, 1, 2], [0, 1, 3], [0, 2, 1]])
print data
# [[0 2 3]
# [0 1 2]
# [0 1 3]
# [0 2 1]]
# lexsort assumes (k, N), so transpose data first. we also need to reverse the
# order of the columns, since lexsort sorts by the last column first
idx = np.lexsort(data[:, ::-1].T)
print data[idx]
# [[0 1 2]
# [0 1 3]
# [0 2 1]
# [0 2 3]]
答案 2 :(得分:0)
我敢打赌通过两个数组进行简单的循环会更快
def comparison(a,b):
for i in xrange(len(a)): #assuming they have to be the same length
if a[i] < b[i]:
return True
elif a[i] > b[i]:
return False
return False
对于您发布的3个元素向量,迭代速度比我的机器快7倍。对于足够大的相同初始元素的延伸,迭代将变慢,但确保在进行矢量化之前就是这种情况。