替换数组中的值

15 投票
3 回答
37728 浏览
提问于 2025-04-15 16:23

在处理数组时,有时候我们需要把一个值替换成另一个值,或者在数组中查找某个值并用另一个值替换它。

举个例子:

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.wherenumpy.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 的地方表示 xNaN(也就是“不是一个数字”)。

x[ boolean_array ] = 0 这行代码利用了一种叫做花式索引的技巧,把布尔数组中为 True 的位置都赋值为 0。

如果你想更深入了解花式索引和其他相关内容,可以看看numpybook

撰写回答