我有一个创建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]])
答案 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>