繁体   English   中英

具有浮点值的Numpy 2d数组在一行中找到最大值并存储在另一个数组中

[英]Numpy 2d array with float values find the maximum value in a single row and store in another array

我有一个程序创建了一个numpy数组,该数组是

数组([[0.0543275,0.51249827,0.43317423],[0.07144389,0.51152126,0.41703486],[0.0776112,0.48593384,0.43645496]])

我使用以下代码连续查找最大值,但不适用于浮点值

for row in a:
maxi = np.argmax(np.max(row, axis=0))
float(maxi)
print(maxi)

我想要这样的东西

array([[0,1,0],[0,1,0],[0,1,0]])

Upd:最初是错误的,现在这只是先前正确答案的实质:

a = np.array([[0.0543275 , 0.51249827, 0.43317423],
              [0.07144389, 0.51152126, 0.41703486], 
              [0.0776112 , 0.48593384, 0.43645496]])

b = np.zeros_like(a)

b[np.arange(a.shape[0]), np.argmax(a, axis=1)] = 1

由于np.argmax()为我们提供了max元素的索引,因此我们仅将它们直接用于索引。 现在b包含所需的输出:

array([[0., 1., 0.],
       [0., 1., 0.],
       [0., 1., 0.]])

您也可以这样做: b.astype(int)转换为整数。

这是一个有效的选项

for e, i in enumerate(a):
    for f, j in enumerate(i):
        if j == max(i):
            a[e][f] = 1
        else:
            a[e][f] = 0

这会将您使用的数组转换为所需的形式:

<class 'numpy.ndarray'>
[[0. 1. 0.]
 [0. 1. 0.]
 [0. 1. 0.]]
In [41]: arr = np.array([[0.0543275 , 0.51249827, 0.43317423], [0.07144389, 0.51
    ...: 152126, 0.41703486], [0.0776112 , 0.48593384, 0.43645496]])            
In [42]: arr                                                                    
Out[42]: 
array([[0.0543275 , 0.51249827, 0.43317423],
       [0.07144389, 0.51152126, 0.41703486],
       [0.0776112 , 0.48593384, 0.43645496]])

每行的最大值为:

In [47]: np.max(arr, axis=1)                                                    
Out[47]: array([0.51249827, 0.51152126, 0.48593384])

它的行索引是:

In [48]: np.argmax(arr, axis=1)                                                 
Out[48]: array([1, 1, 1])

我们可以通过以下方式将该argmax数组映射到具有相同形状的数组:

In [52]: x = np.zeros(arr.shape, int)                                           
In [53]: x[np.arange(3),_48] = 1                                                
In [54]: x                                                                      
Out[54]: 
array([[0, 1, 0],
       [0, 1, 0],
       [0, 1, 0]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM