仅用一行过滤2d numpy数组的列

时间:2018-01-30 14:21:55

标签: python numpy

如果这个问题应该是重新发布,如果有人能指出我另一个问题,我会很高兴,但不幸的是我没有找到任何相关的问题。

我有一个2d numy数组,我想用一行的中位数将它们分开。 我想写的功能看起来像这样:

def median_split(data, line_number):

其中data是我的2d numpy数组,line_number是我计算中值的行数。 然后该函数应该返回两个2d numpy数组,其中一个在给定行中只有值< =中值,而另一个只有值>中值。

我现在的问题是,numpy中是否存在某种包含过滤功能,如果没有,实现此目标的最实用方法是什么?
我的意思是我可以迭代每一列,进行比较,然后将列连接到另一个2d numpy数组,但不知何故感觉不是很优雅。

1 个答案:

答案 0 :(得分:0)

使用np.median查找中位数,然后使用np.wheres查找指数大于上述值的位置。 (我假设您的数组在轴1中排序,或者中位数无论如何都没有意义。)

我认为这就是你想要的,尽管我对你想要的输出有点困惑。如果这不对,请随意澄清并发表评论。

def median_split(data, line_number):

    row = data[line_number, :]
    median = np.median(row)
    wheres = np.where(median <= row)[0]  # only one axis so get index 0
    col = wheres[0]  # just get the first one

    return data[:, :col], data[:, col:]

随意优化和缩短这一点,我选择了清晰度而不是效率。