如何解决如何根据每行的条件替换np 2d数组中的值
我有一个带有概率的numpy二维数组(名为lda_fit
),我想根据每行的最大值用0或1替换概率。
array([[0.06478282,0.80609092,0.06511851,0.06400775],[0.50386571,0.02621445,0.44400621,0.02591363],[0.259538,0.04266385,0.65470484,0.04309331],...,[0.01415491,0.01527508,0.22211579,0.74845422],[0.01419367,0.01537099,0.01521318,0.95522216],[0.25,0.25,0.25 ]])
因此,第一行毕竟应该像[0,1,0]
,第二行应该像[1,0]
,依此类推。我已经尝试过了,但是这只适用于给定的阈值(0.5):
np.where(lda_fit < 0.5,1)
但是由于我的最大值可能不大于0.5,因此我想为每行指定一个新的阈值。不幸的是,这给了我整个数组的最大值。
np.where(lda_fit < np.max(lda_fit),1)
解决方法
您可以将np.max
用于指定轴:
(lda_fit.max(1,keepdims=True)==lda_fit)+0
注意:如果连续超过一个最大值,则所有最大值将返回1。要获得替代解决方案,请遵循以下方法。
输出,例如有问题的输入
[[0 1 0 0]
[1 0 0 0]
[0 0 1 0]
[0 0 0 1]
[0 0 0 1]
[1 1 1 1]]
如果连续存在多个最大值,如果您只希望第一个为1,其余最大值为0,则可以使用argmax
:
(lda_fit.argmax(axis=1)[:,None] == range(lda_fit.shape[1]))+0
或同样:
lda_fit_max = np.zeros(lda_fit.shape,dtype=int)
lda_fit_max[np.arange(len(lda_fit)),lda_fit.argmax(axis=1)]=1
输出:
[[0 1 0 0]
[1 0 0 0]
[0 0 1 0]
[0 0 0 1]
[0 0 0 1]
[1 0 0 0]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。