如果这个问题应该是重新发布,如果有人能指出我另一个问题,我会很高兴,但不幸的是我没有找到任何相关的问题。
我有一个2d numy数组,我想用一行的中位数将它们分开。 我想写的功能看起来像这样:
def median_split(data, line_number):
其中data是我的2d numpy数组,line_number是我计算中值的行数。 然后该函数应该返回两个2d numpy数组,其中一个在给定行中只有值< =中值,而另一个只有值>中值。
我现在的问题是,numpy中是否存在某种包含过滤功能,如果没有,实现此目标的最实用方法是什么?
我的意思是我可以迭代每一列,进行比较,然后将列连接到另一个2d numpy数组,但不知何故感觉不是很优雅。
答案 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:]
随意优化和缩短这一点,我选择了清晰度而不是效率。