python - 来自 numpy 数组中的最大值的掩码,特定轴

标签 python numpy

输入示例:

我有一个 numpy 数组,例如

a=np.array([[0,1], [2, 1], [4, 8]])

期望的输出:

我想生成一个掩码数组,其最大值沿给定轴(在我的情况下为轴 1)为 True,所有其他轴为 False。例如在这种情况下

mask = np.array([[False, True], [True, False], [False, True]])

尝试:

我尝试过使用 np.amax 的方法,但这会返回展平列表中的最大值:

>>> np.amax(a, axis=1)
array([1, 2, 8])

np.argmax 类似地返回沿该轴的最大值的索引。

>>> np.argmax(a, axis=1)
array([1, 0, 1])

我可以以某种方式对此进行迭代,但是一旦这些数组变大,我希望解决方案在 numpy 中保持原生。

最佳答案

方法#1

使用 broadcasting ,我们可以使用与最大值的比较,同时保持暗淡以促进广播 -

a.max(axis=1,keepdims=1) == a

sample 运行-

In [83]: a
Out[83]: 
array([[0, 1],
       [2, 1],
       [4, 8]])

In [84]: a.max(axis=1,keepdims=1) == a
Out[84]: 
array([[False,  True],
       [ True, False],
       [False,  True]], dtype=bool)

方法#2

对于另一种情况,argmax 索引对于沿列的索引范围的 broadcasted-comparison 或者 -

In [92]: a.argmax(axis=1)[:,None] == range(a.shape[1])
Out[92]: 
array([[False,  True],
       [ True, False],
       [False,  True]], dtype=bool)

方法#3

要完成设置,如果我们正在寻找性能,请使用初始化,然后使用 advanced-indexing -

out = np.zeros(a.shape, dtype=bool)
out[np.arange(len(a)), a.argmax(axis=1)] = 1

关于python - 来自 numpy 数组中的最大值的掩码,特定轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678252/

相关文章:

python - 在单独的线程中运行 pyQT GUI 主应用程序

python - 如何将tensorflow placerholder变量转换为numpy数组?

Python Pandas : how to vectorize this function

python - 将二进制字符串转换为 IEEE-754 单精度 - Python

numpy - 任意轮廓的平滑样条表示,f(length) --> x,y

python - numpy.where 以及条件中的数据位置

python - 将数据框的所有数字列转换为绝对值

python - 未安装错误: TfidfVectorizer - Vocabulary wasn't fitted

Python Twitter 流 API - 仅关注用户

python - 追加列表、数组、矩阵