numpy 我如何有条件地更改Numy数组中的值,同时考虑到NaN?

ix0qys7i  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(464)

我的数组是一个2D矩阵,除了负值和正值外,它还有numpy.nan值:

>>> array
array([[        nan,         nan,         nan, ..., -0.04891211,
                nan,         nan],
       [        nan,         nan,         nan, ...,         nan,
                nan,         nan],
       [        nan,         nan,         nan, ...,         nan,
                nan,         nan],
       ..., 
       [-0.02510989, -0.02520096, -0.02669156, ...,         nan,
                nan,         nan],
       [-0.02725595, -0.02715945, -0.0286231 , ...,         nan,
                nan,         nan],
       [        nan,         nan,         nan, ...,         nan,
                nan,         nan]], dtype=float32)

(数组中有正数,它们只是不会显示在预览中。)
我想用一个数字替换所有的正数,用另一个数字替换所有的负数。
我如何使用python/numpy来执行该操作?
(对于记录,矩阵是地理图像的结果,我想对其进行分类)

7bsow1i6

7bsow1i61#

阵列中有np.nan这一事实应该无关紧要。只需使用花哨的索引:

x[x>0] = new_value_for_pos
x[x<0] = new_value_for_neg

如果您想要更换您的np.nans

x[np.isnan(x)] = something_not_nan

更多关于奇特索引教程和NumPy documentation的信息。

2eafrhcq

2eafrhcq2#

尝试:

a[a>0] = 1
a[a<0] = -1
oxiaedzo

oxiaedzo3#

向当前值加或减(np.nan不受影响)

import numpy as np

a = np.arange(-10, 10).reshape((4, 5))

print("after -")
print(a)

a[a<0] = a[a<0] - 2
a[a>0] = a[a>0] + 2

print(a)

输出

[[-10  -9  -8  -7  -6]
 [ -5  -4  -3  -2  -1]
 [  0   1   2   3   4]
 [  5   6   7   8   9]]

after -

[[-12 -11 -10  -9  -8]
 [ -7  -6  -5  -4  -3]
 [  0   3   4   5   6]
 [  7   8   9  10  11]]
3lxsmp7m

3lxsmp7m4#

如果new_value_for_pos为负,则Pierre's answer不起作用。在这种情况下,您可以在链中使用np.where()


# Example values

x = np.array([np.nan, -0.2, 0.3])
new_value_for_pos = -1
new_value_for_neg = 2

x[:] = np.where(x>0, new_value_for_pos, np.where(x<0, new_value_for_neg, x))

结果:

array([nan,  2., -1.])

相关问题