python中替换数组(矩阵)中指定元素

在使用python的numpy包进行矩阵运算时候,有时候需要查找矩阵中满足一定条件的元素,然后全部替换值为某一值,例如需要把所有大于1的元素值置为1。在numpy包中的np.where()函数和astype都可以实现这一功能。

np.where()

np.where()函数中,接受一个类似bool型的函数,具体使用方法如下:

1
2
3
4
5
6
>>> m1=np.array([0, 6, 0, 9])
>>> m1_non = np.where(m1>1,1,0)
>>> m1_non
array([0, 1, 0, 1])
>>> m1
array([3, 6, 0, 9])

上面的python程序,表示有数组m1=[0,6,0,9],np.where(m1>1,1,0)函数查找数组m中的元素,如果大于1,将其置为1,否则为0。可以看到,查找替换过程不会更改原始数组。

对于二维数组(矩阵)同样适用。

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> m2
array([[1, 2, 0],
[0, 4, 3],
[0, 0, 0]])
>>> m2_non = np.where(m2>1,1,0)
>>> m2_non
array([[0, 1, 0],
[0, 1, 1],
[0, 0, 0]])
>>> m2
array([[1, 2, 0],
[0, 4, 3],
[0, 0, 0]])

astype()

astype()函数和上面的np.where()的使用方法类似,但它的效率更高一些,具体使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> m1
array([3, 6, 0, 9])
>>> (m1>1).astype(int)
array([1, 1, 0, 1])
>>> m1
array([3, 6, 0, 9])
>>> m2
array([[1, 2, 0],
[0, 4, 3],
[0, 0, 0]])
>>> (m2>1).astype(int)
array([[0, 1, 0],
[0, 1, 1],
[0, 0, 0]])
>>> m2
array([[1, 2, 0],
[0, 4, 3],
[0, 0, 0]])

同样的,astype不会更改原始数组

Reference:

https://stackoverflow.com/questions/45648668/convert-numpy-array-to-0-or-1

写的还不错?那就来个红包吧!
0%