使用numpy

时间:2015-09-30 18:31:18

标签: python arrays sorting numpy indexing

在python / numpy中执行以下操作的最简单方法是什么?

  • 以随机数组x
  • 开头
  • 过滤掉元素x < .5
  • 按大小排序剩余值
  • 返回与这些值对应的(原始)x的索引

3 个答案:

答案 0 :(得分:3)

找到x < 0.5x.argsort()的面具似乎是强制性的。一旦有了这两个,就可以使用排序索引对掩码数组进行排序,并在排序索引上使用此掩码来获取与满足掩码条件的排序索引相对应的索引。因此,您将添加一行代码,如此 -

mask = x < 0.5
sort_idx = x.argsort()
out = sort_idx[mask[sort_idx]]

逐步运行示例 -

In [56]: x
Out[56]: array([ 0.8974009 ,  0.30127187,  0.71187137,  0.04041124])

In [57]: mask
Out[57]: array([False,  True, False,  True], dtype=bool)

In [58]: sort_idx
Out[58]: array([3, 1, 2, 0])

In [59]: mask[sort_idx]
Out[59]: array([ True,  True, False, False], dtype=bool)

In [60]: sort_idx[mask[sort_idx]]
Out[60]: array([3, 1])

答案 1 :(得分:2)

蒙面数组简洁(但可能效率不高)

B

答案 2 :(得分:0)

我发现我的解决方案有点麻烦:

import numpy as np

x = np.random.rand(4);
filter_bools = x < .5;
sorted_indices = np.argsort(x)
sorted_filter = filter_bools[sorted_indices]

filtered_sorted_indices = sorted_indices[sorted_filter == True]

print 'x:\t\t\t\t', x
print 'sorted indices:\t\t\t', sorted_indices
print 'indices for x < .5, sorted:\t', filtered_sorted_indices
print 'sorted, filtered x values:\t', x[filtered_sorted_indices]

输出:

x:                          [ 0.8974009   0.30127187  0.71187137  0.04041124]
sorted indices:             [3 1 2 0]
indices for x < .5, sorted: [3 1]
sorted, filtered x values:  [ 0.04041124  0.30127187]