我正在尝试获取 numpy.arrays 的最大值,如下面的代码所示:

[np.nanmax(temp_data[i:i+window_size, 1:], axis=0) for i, t in enumerate(temp_data)]

虽然,我收到以下错误:
{TypeError}ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

无论如何,如果我使用 nanmax 而不是 nansum ,就像下面的代码一样,一切都会顺利进行:
[np.nansum(temp_data[i:i+window_size, 1:], axis=0) for i, t in enumerate(temp_data)]
=> A 9x2 requested np.array

此外,这对于代码,无论是 nanmax 还是 nansum 都可以工作:
[np.nansum(temp_data[i:i+window_size, 1:]) for i, t in enumerate(temp_data)]
[np.nanmax(temp_data[i:i+window_size, 1:]) for i, t in enumerate(temp_data)]
=> A 9x1 np.array, (but this is not what I want)

任何想法,为什么在 nanmax 中指定轴失败,而它适用于 nansum

编辑:temp_data 示例:
    temp_data = np.array([[datetime.datetime(1980, 1, 1, 0, 0), np.nan, np.nan],
                          [datetime.datetime(1980, 1, 2, 0, 0), np.nan, np.nan],
                          [datetime.datetime(1980, 1, 3, 0, 0), np.nan, np.nan],
                          [datetime.datetime(1980, 1, 4, 0, 0), np.nan, np.nan],
                          [datetime.datetime(1980, 1, 7, 0, 0), np.nan, 1],
                          [datetime.datetime(1980, 1, 8, 0, 0), np.nan, 2],
                          [datetime.datetime(1980, 1, 9, 0, 0), 1, 3],
                          [datetime.datetime(1980, 1, 10, 0, 0), 5, 4],
                          [datetime.datetime(1980, 1, 11, 0, 0), 4, 1]])

最佳答案

您可以强制对数据进行 float 转换,因为 numpy 在具有 object 类型时似乎不知道如何处理数据:

#                                              \/
>>> [np.nanmax(temp_data[i:i+window_size, 1:].astype(float), axis=0) for i, t in enumerate(temp_data)]
[array([ nan,  nan]),
 array([ nan,  nan]),
 array([ nan,  nan]),
 array([ nan,   1.]),
 array([ nan,   2.]),
 array([ 1.,  3.]),
 array([ 5.,  4.]),
 array([ 5.,  4.]),
 array([ 4.,  1.])]

关于python - 在 nanmax 中指定轴时出现 Numpy 错误,而 nansum 使用相同的情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43659827/

10-11 01:12