Python, numpy 数组代码对NaN元素不起作用

2024-10-04 03:16:02 发布

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

我创建了一个代码来搜索数组(3 dimensioanl,(x,y,values))中给定x和y坐标中的最大值,但是当值是nan时它就不起作用了。你知道吗

以下是我目前掌握的代码:

table = np.amax(t, axis = 2)
elements = np.isnan(table)
numbers = table[~elements]
x = np.reshape(numbers, (4, -1))
return np.array(x)

因此,对于:

t = np.array([[[ np.NaN,  np.NaN,  8.7],
    [ 12.6,  4.9,  8.2]],

   [[ 8.4,   np.NaN,   4.9],
    [  66.8,   np.NaN,   78.6]],

   [[ np.NaN,   81.9,   61.5],
    [ np.NaN,   94.2,  1.3 ]],

   [[ 15.6,  np.NaN,  77.4],
    [ 28.2,  8.3,  8.7]]])

答案应该是:

array([[ 8.7  12.6]
   [ 8.4   78.6]
   [  81.9  94.2 ]
   [ 77.4  28.2]])

在我看来np.amax公司忽略实际的最大值,只返回一个NaN?你知道吗


Tags: 代码nptable数组elementsnanarrayvalues
1条回答
网友
1楼 · 发布于 2024-10-04 03:16:02

只需使用^{}-

In [140]: t = np.array([[[ np.NaN,  np.NaN,  8.7],
     ...:     [ 12.6,  4.9,  8.2]],
     ...:    [[ 8.4,   np.NaN,   4.9],
     ...:     [  66.8,   np.NaN,   78.6]],
     ...:    [[ np.NaN,   81.9,   61.5],
     ...:     [ np.NaN,   94.2,  1.3 ]],
     ...:    [[ 15.6,  np.NaN,  77.4],
     ...:     [ 28.2,  8.3,  8.7]]])

In [141]: np.nanmax(t,axis=-1)
Out[141]: 
array([[  8.7,  12.6],
       [  8.4,  78.6],
       [ 81.9,  94.2],
       [ 77.4,  28.2]])

相关问题 更多 >