在最小值的索引处返回二进制“1”
Returning binary '1' at index of minimum value
我有一个形状为 (50,2) 的 np 数组
所以对于每一行,我都试图获得我认为我设法获得的最小值的索引
大致
for i in range(len(mylist)):
list(my_list[i]).index(min(my_list[i]))
但是,我对如何在最小值的索引处插入“1”感到困惑?
例如
([[2,4],
[5,3]])
will give the index values for the min(my_list) as
0
1
那么第一行的索引为 0,第二行的索引为 1
如何在最小值的索引处插入二进制值,以便输出类似于
[1,0]
[0,1]
.
.
.
谢谢!
使用 numpy.arange
for the indices of the rows and numpy.argmin
作为列的索引:
import numpy as np
arr = np.array([[2, 4],
[5, 3]])
res = np.zeros_like(arr)
res[np.arange(arr.shape[0]), arr.argmin(axis=1)] = 1
print(res)
输出
[[1 0]
[0 1]]
解决问题的一种更优雅、更易读的方法是,首先将数组复制到另一个数组中,然后切换第二个数组中的列,只需简单地使用逻辑运算符即可获得所需内容。看看下面的代码:
import numpy as np
my_list = np.array([[2, 4],
[5, 3]])
my_list_swaped = my_list.copy()
my_list_swaped [ : , [0,1]] = my_list_swaped[ : ,[1,0]] #Swapping the columns
print( my_list < my_list_swaped )
您将得到的是:
array([[ True, False],
[False, True]])
基本上是:
array([[ 1, 0],
[0, 1]])
简化代码:
如果你没有遇到问题肮脏的方式(可读性较差的方式),你可以直接使用逻辑运算符和索引来获得你想要的东西:
import numpy as np
my_list = np.array([[2, 4],
[5, 3]])
result = my_list < my_list[ : , [1,0] ]
print(result)
您可以将 argmin 与 identity-matrix-one-hot trick 一起使用:
rng = np.random.default_rng()
exmpl = rng.integers(0,10,(4,2))
exmpl
# array([[4, 0],
# [8, 5],
# [1, 3],
# [3, 0]])
np.identity(2,int)[exmpl.argmin(1)]
# array([[0, 1],
# [0, 1],
# [1, 0],
# [0, 1]])
我有一个形状为 (50,2) 的 np 数组
所以对于每一行,我都试图获得我认为我设法获得的最小值的索引 大致
for i in range(len(mylist)):
list(my_list[i]).index(min(my_list[i]))
但是,我对如何在最小值的索引处插入“1”感到困惑?
例如
([[2,4],
[5,3]])
will give the index values for the min(my_list) as
0
1
那么第一行的索引为 0,第二行的索引为 1
如何在最小值的索引处插入二进制值,以便输出类似于
[1,0]
[0,1]
.
.
.
谢谢!
使用 numpy.arange
for the indices of the rows and numpy.argmin
作为列的索引:
import numpy as np
arr = np.array([[2, 4],
[5, 3]])
res = np.zeros_like(arr)
res[np.arange(arr.shape[0]), arr.argmin(axis=1)] = 1
print(res)
输出
[[1 0]
[0 1]]
解决问题的一种更优雅、更易读的方法是,首先将数组复制到另一个数组中,然后切换第二个数组中的列,只需简单地使用逻辑运算符即可获得所需内容。看看下面的代码:
import numpy as np
my_list = np.array([[2, 4],
[5, 3]])
my_list_swaped = my_list.copy()
my_list_swaped [ : , [0,1]] = my_list_swaped[ : ,[1,0]] #Swapping the columns
print( my_list < my_list_swaped )
您将得到的是:
array([[ True, False],
[False, True]])
基本上是:
array([[ 1, 0],
[0, 1]])
简化代码:
如果你没有遇到问题肮脏的方式(可读性较差的方式),你可以直接使用逻辑运算符和索引来获得你想要的东西:
import numpy as np
my_list = np.array([[2, 4],
[5, 3]])
result = my_list < my_list[ : , [1,0] ]
print(result)
您可以将 argmin 与 identity-matrix-one-hot trick 一起使用:
rng = np.random.default_rng()
exmpl = rng.integers(0,10,(4,2))
exmpl
# array([[4, 0],
# [8, 5],
# [1, 3],
# [3, 0]])
np.identity(2,int)[exmpl.argmin(1)]
# array([[0, 1],
# [0, 1],
# [1, 0],
# [0, 1]])