如果数字在列表中,则为 Numpy 布尔索引
Numpy boolean indexing if number is in list
我有以下数组:
x = np.array([
[2, 0],
[5, 0],
[1, 0],
[8, 0],
[6, 0]])
我了解到您可以使用布尔运算来更改 numpy 数组中的选定值。如果我想将第一个值等于 2、5 或 8 的行的第二列的值更改为 1,我可以执行以下操作:
x[x[:, 0] == 2, 1] = 1
x[x[:, 0] == 5, 1] = 1
x[x[:, 0] == 8, 1] = 1
将输出更改为:
[[2 1]
[5 1]
[1 0]
[8 1]
[6 0]]
如果那是 "normal" python 代码,我知道我可以做到:
if value in [2, 5, 8]: ...
而不是:
if value == 2 or value == 5 or value == 8: ...
是否有 shorthand 可以用 numpy 数组做这样的事情?
你可以使用numpy的isin
方法:
x[np.isin(x[:, 0], [2, 5, 8]), 1] = 1
您可以组合 np.isin()
with np.where()
:
x[:,1] = np.where(np.isin(x[:,0], [2,5,8]), 1, 0)
我有以下数组:
x = np.array([
[2, 0],
[5, 0],
[1, 0],
[8, 0],
[6, 0]])
我了解到您可以使用布尔运算来更改 numpy 数组中的选定值。如果我想将第一个值等于 2、5 或 8 的行的第二列的值更改为 1,我可以执行以下操作:
x[x[:, 0] == 2, 1] = 1
x[x[:, 0] == 5, 1] = 1
x[x[:, 0] == 8, 1] = 1
将输出更改为:
[[2 1]
[5 1]
[1 0]
[8 1]
[6 0]]
如果那是 "normal" python 代码,我知道我可以做到:
if value in [2, 5, 8]: ...
而不是:
if value == 2 or value == 5 or value == 8: ...
是否有 shorthand 可以用 numpy 数组做这样的事情?
你可以使用numpy的isin
方法:
x[np.isin(x[:, 0], [2, 5, 8]), 1] = 1
您可以组合 np.isin()
with np.where()
:
x[:,1] = np.where(np.isin(x[:,0], [2,5,8]), 1, 0)