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

时间:2019-02-23 08:48:47

标签: python arrays numpy

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

  

array([[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]])

3 个答案:

答案 0 :(得分:2)

更新:这本来是错误的,现在这只是先前正确答案的实质:

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)转换为整数。

答案 1 :(得分:1)

这是一个有效的选项

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.]]

答案 2 :(得分:1)

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]]) 数组映射到具有相同形状的数组:

<weather>
 <year>2019</year>  
 <month>2</month>
 <date>23</date>
 <dayOfWeek>THU</dayOfWeek> 
 <forecast>Plenty of sunshine</forecast>
 <overallCode>sunny</overallCode>
 <hightemperature scale="">25</hightemperature>
 <lowtemperature scale="">11</lowtemperature>
</weather>

<weather>
 <year>2019</year>  
 <month>2</month>
 <date>24</date>
 <dayOfWeek>WED</dayOfWeek> 
 <forecast>Partly sunny</forecast>
 <overallCode>partlySunny</overallCode> 
 <hightemperature scale="">21</hightemperature>
 <lowtemperature scale="">10</lowtemperature>
</weather>

<weather>
 <year>2019</year>  
 <month>2</month>
 <date>25</date>
 <dayOfWeek>TUE</dayOfWeek> 
 <forecast>A morning shower, then rain</forecast>
 <overallCode>rain</overallCode>
 <hightemperature scale="">19</hightemperature>
 <lowtemperature scale="">10</lowtemperature>
</weather>