![](/img/trans.png)
[英]Find the index number of row and values of first 3 maximum values of 2D Numpy Array
[英]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.