替换数组中的值
在处理数组时,有时候我们需要把一个值替换成另一个值,或者在数组中查找某个值并用另一个值替换它。
举个例子:
array ([[NaN, 1., 1., 1., 1., 1., 1.]
[1., NaN, 1., 1., 1., 1., 1.]
[1., 1., NaN, 1., 1., 1., 1.]
[1., 1., 1., NaN, 1., 1., 1.]
[1., 1., 1., 1., NaN, 1., 1.]
[1., 1., 1., 1., 1., NaN, 1.]
[1., 1., 1., 1., 1., 1., NaN]])
在这个例子中,它可以把NaN(表示不是一个数字的值)替换成0。
谢谢大家的回复!
3 个回答
1
这里是问题中的示例数组:
import numpy as np
a = np.where(np.eye(7), np.nan, 1)
你可以使用 numpy.where 和 numpy.isnan 这两个函数来创建一个新的数组 b
:
b = np.where(np.isnan(a), 0, a)
或者,你也可以使用一个就地函数,直接修改 a
数组:
np.place(a, np.isnan(a), 0) # returns None
15
现在有一个特别的功能:
a = numpy.nan_to_num(a)
31
你可以这样做:
import numpy as np
x=np.array([[np.NaN, 1., 1., 1., 1., 1., 1.],[1., np.NaN, 1., 1., 1., 1., 1.],[1., 1., np.NaN, 1., 1., 1., 1.], [1., 1., 1., np.NaN, 1., 1., 1.], [1., 1., 1., 1., np.NaN, 1., 1.],[1., 1., 1., 1., 1., np.NaN, 1.], [1., 1., 1., 1., 1., 1., np.NaN]])
x[np.isnan(x)]=0
np.isnan(x)
这个函数会返回一个布尔数组,数组里的值是 True
的地方表示 x
是 NaN
(也就是“不是一个数字”)。
x[ boolean_array ] = 0
这行代码利用了一种叫做花式索引的技巧,把布尔数组中为 True
的位置都赋值为 0。
如果你想更深入了解花式索引和其他相关内容,可以看看numpybook。