使用数字列表索引 numpy 数组
Index numpy arrays with a list of numbers
我想根据特定数字索引一个 numpy 数组,例如,我有以下 np 数组,
b = np.array([[1, 2, 3, 2, 1, 3],[2, 1, 3, 5, 4, 1]])
我想将不同于 1 和 2 的值更改为零。我试过了,
b[b not in [1, 2]] = 0
但确实奏效了。关于如何做的任何想法?非常感谢
您可以使用 numpy.isin()
:
import numpy as np
b = np.array([[1, 2, 3, 2, 1, 3],[2, 1, 3, 5, 4, 1]])
v = np.array([1,2])
m = np.isin(b, v)
b[~m] = 0
print(b)
输出:
[[1 2 0 2 1 0]
[2 1 0 0 0 1]]
In [266]: b = np.array([[1, 2, 3, 2, 1, 3],[2, 1, 3, 5, 4, 1]])
由于您要更改的所有值都大于 2:
In [267]: b>2
Out[267]:
array([[False, False, True, False, False, True],
[False, False, True, True, True, False]])
In [268]: np.where(b>2,0,b)
Out[268]:
array([[1, 2, 0, 2, 1, 0],
[2, 1, 0, 0, 0, 1]])
或配对两个测试:
In [271]: (b==1)|(b==2)
Out[271]:
array([[ True, True, False, True, True, False],
[ True, True, False, False, False, True]])
In [272]: np.where((b==1)|(b==2),b,0)
Out[272]:
array([[1, 2, 0, 2, 1, 0],
[2, 1, 0, 0, 0, 1]])
我们可以就地改变b
,但我选择了where
,这样我就可以在不改变b
的情况下测试各种想法。
如果一组明显小于另一组,isin
使用类似的想法,在这种情况下是正确的。
我想根据特定数字索引一个 numpy 数组,例如,我有以下 np 数组,
b = np.array([[1, 2, 3, 2, 1, 3],[2, 1, 3, 5, 4, 1]])
我想将不同于 1 和 2 的值更改为零。我试过了,
b[b not in [1, 2]] = 0
但确实奏效了。关于如何做的任何想法?非常感谢
您可以使用 numpy.isin()
:
import numpy as np
b = np.array([[1, 2, 3, 2, 1, 3],[2, 1, 3, 5, 4, 1]])
v = np.array([1,2])
m = np.isin(b, v)
b[~m] = 0
print(b)
输出:
[[1 2 0 2 1 0]
[2 1 0 0 0 1]]
In [266]: b = np.array([[1, 2, 3, 2, 1, 3],[2, 1, 3, 5, 4, 1]])
由于您要更改的所有值都大于 2:
In [267]: b>2
Out[267]:
array([[False, False, True, False, False, True],
[False, False, True, True, True, False]])
In [268]: np.where(b>2,0,b)
Out[268]:
array([[1, 2, 0, 2, 1, 0],
[2, 1, 0, 0, 0, 1]])
或配对两个测试:
In [271]: (b==1)|(b==2)
Out[271]:
array([[ True, True, False, True, True, False],
[ True, True, False, False, False, True]])
In [272]: np.where((b==1)|(b==2),b,0)
Out[272]:
array([[1, 2, 0, 2, 1, 0],
[2, 1, 0, 0, 0, 1]])
我们可以就地改变b
,但我选择了where
,这样我就可以在不改变b
的情况下测试各种想法。
isin
使用类似的想法,在这种情况下是正确的。