【发布时间】:2017-01-14 14:12:16
【问题描述】:
考虑矩阵quantiles,它是形状为(10,355,8) 的3D 矩阵的子集[:8,:3,0]。
quantiles = np.array([
[ 1. , 1. , 1. ],
[ 0.63763978, 0.61848863, 0.75348137],
[ 0.43439645, 0.42485407, 0.5341457 ],
[ 0.22682343, 0.18878366, 0.25253915],
[ 0.16229408, 0.12541476, 0.15263742],
[ 0.12306046, 0.10372971, 0.09832783],
[ 0.09271845, 0.08209844, 0.05982584],
[ 0.06363636, 0.05471266, 0.03855727]])
我想要一个与quantiles 矩阵形状相同的布尔输出,其中True 标记中位数所在的行:
In [21]: medians
Out[21]:
array([[False, False, False],
[ True, True, False],
[False, False, True],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]], dtype=bool)
为了实现这一点,我想到了以下算法:
1) 识别大于.5的条目:
In [22]: quantiles>.5
Out[22]:
array([[ True, True, True],
[ True, True, True],
[False, False, True],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]], dtype=bool)
2) 仅考虑quantiles>.5 操作的值子集,标记最小化条目和.5 之间的np.abs 距离的行。稍微折磨一下术语,我希望将np.argmin(np.abs(quantiles-.5),axis=0) 和quantiles>.5 的两个矩阵相交以获得上述结果。但是,我一生无法找到一种方法来在子集上执行np.argmin 并保留quantile 矩阵的形状。
PS。是的,有一个类似的问题here,但它没有实现我的算法,我认为这在更大范围内可能更有效
【问题讨论】:
-
输入中的每一列是否会按降序排列?
-
@Divakar 嗨,伙计,对不起,我没有早点回答你的问题。没有任何排序。实际上,保持对齐是后续操作不可或缺的(此处未显示)
标签: python arrays numpy boolean median