Python数组中的零值到nan值

2024-04-23 14:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组,其中有一些零值,我想转换成nan值。当我应用代码时
所有值都变为nan

myarray
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]])

myarray.shape
(64L, 52L)
myarray.max()
4563.666015625
myarray.min()
0.0

我想转换nan中的零值。我用一个来自stackoverflow的例子

^{pr2}$

当我把这个例子应用到数组时,所有的值都变成了nan

myarray[myarray == 0.] = nan
myarray
array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       ..., 
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan]])

myarray.max()
nan
myarray.min()
nan

Tags: 代码数组nanminstackoverflowarraymax例子
1条回答
网友
1楼 · 发布于 2024-04-23 14:02:50

并不是所有的值都变成了nan,而是(1)你只看到了其中的部分,(2)min和{}不能很好地与nan一起工作

例如,如果我们制作一个类似于您的数组:

>>> myarray = np.zeros((64, 52))
>>> myarray[3:-3,3:-3] = np.random.uniform(0, 5000, (64-6,52-6))
>>> myarray
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]])
>>> myarray[myarray==0] = np.nan
>>> myarray
array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       ..., 
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan]])

它看起来好像都是nan,但事实并非如此:

^{pr2}$

您还可以使用^{}^{},它们忽略了nans:

>>> myarray.min()
nan
>>> myarray.max()
nan
>>> np.nanmin(myarray)
0.60474162939361253
>>> np.nanmax(myarray)
4996.8967777356092

相关问题 更多 >