假设我有一个2d numpy数组,我想在每行的基础上过滤通过某个条件的元素。例如,我只需要第90个百分位以上的元素作为其特定行的。我想出了一个解决方案:
import numpy as np
a = np.random.random((6,5))
thresholds = np.percentile(a, 90, axis=1)
threshold_2d = np.vstack([thresholds]*a.shape[1]).T
mask = a > threshold_2d
final = np.where(mask, a, np.nan)
它是可行的,它是矢量化的,但感觉有点尴尬,尤其是我创建threshold_2d的部分。有没有更优雅的方式?我能用某种方式自动广播一个条件吗np.哪里不必创建匹配的2d蒙版?在
广播
^{} 创建长度为1的轴,生成的数组视图具有维度(6,1),可以使用
a
数组进行广播。在相关问题 更多 >
编程相关推荐