情况如下:
我有一个2D的numpy数组。它的形状是(1002,1004)。每个元素包含一个介于0和Inf之间的值。现在我想要做的是确定前1000个最大值,并将相应的索引存储到名为x和y的列表中。这是因为我想绘制最大值,而索引实际上对应于值的实时x和y位置。
我目前拥有的是:
这是我的2D numpy数组。从for循环可以看出,我目前只确定了前500个最大值。然而,这已经花费了约5秒的时间。对于前1000个最大值,用户时间实际上应该在0.5秒左右。我注意到一个非常耗时的部分是每次将先前的最大值设置为0。如何加快速度呢?
非常感谢!
我有一个2D的numpy数组。它的形状是(1002,1004)。每个元素包含一个介于0和Inf之间的值。现在我想要做的是确定前1000个最大值,并将相应的索引存储到名为x和y的列表中。这是因为我想绘制最大值,而索引实际上对应于值的实时x和y位置。
我目前拥有的是:
x = numpy.zeros(500)
y = numpy.zeros(500)
for idx in range(500):
x[idx] = numpy.unravel_index(full.argmax(), full.shape)[0]
y[idx] = numpy.unravel_index(full.argmax(), full.shape)[1]
full[full == full.max()] = 0.
print os.times()
这是我的2D numpy数组。从for循环可以看出,我目前只确定了前500个最大值。然而,这已经花费了约5秒的时间。对于前1000个最大值,用户时间实际上应该在0.5秒左右。我注意到一个非常耗时的部分是每次将先前的最大值设置为0。如何加快速度呢?
非常感谢!
partition
和argpartition
函数。我在我的答案中使用了后者。 - Warren Weckesserpartition
和unique
相似吗? - The Dude