gpt4 book ai didi

python - Numpy triu 在调用具有无限值的矩阵时生成 nan

转载 作者:行者123 更新时间:2023-11-28 21:54:07 29 4
gpt4 key购买 nike

刚刚在 Numpy 1.8.1 的 triu 函数中发现了一些意想不到的行为。

import numpy as np
a = np.zeros((4, 4))
a[1:, 2] = np.inf
a
>>>array([[ 0., 0., 0., 0.],
[ inf, 0., 0., 0.],
[ inf, 0., 0., 0.],
[ inf, 0., 0., 0.]])

np.triu(a)
>>>array([[ 0., 0., 0., 0.],
[ nan, 0., 0., 0.],
[ nan, 0., 0., 0.],
[ nan, 0., 0., 0.]])

这种行为会令人满意吗?还是我应该提交错误报告?

编辑

我提出了一个issue在 Numpy github 页面上

最佳答案

1。说明

您似乎忽略了 RuntimeWarning:

>>> np.triu(a)
twodim_base.py:450: RuntimeWarning: invalid value encountered in multiply
out = multiply((1 - tri(m.shape[0], m.shape[1], k - 1, dtype=m.dtype)), m)

source code for numpy.triu如下:

def triu(m, k=0):
m = asanyarray(m)
out = multiply((1 - tri(m.shape[0], m.shape[1], k - 1, dtype=m.dtype)), m)
return out

这使用 numpy.tri得到一个数组,其对角线下方为零,上方为零,然后从 1 中减去该数组,得到对角线下方为零,上方为零的数组:

>>> 1 - np.tri(4, 4, -1)
array([[ 1., 1., 1., 1.],
[ 0., 1., 1., 1.],
[ 0., 0., 1., 1.],
[ 0., 0., 0., 1.]])

然后它将这个元素与原始数组相乘。因此,在原始数组具有 inf 的情况下,结果具有 inf * 0,即 NaN。

2。解决方法

使用numpy.tril_indices生成下三角的索引,并将所有这些条目设置为零:

>>> a = np.ones((4, 4))
>>> a[1:, 0] = np.inf
>>> a
array([[ 1., 1., 1., 1.],
[ inf, 1., 1., 1.],
[ inf, 1., 1., 1.],
[ inf, 1., 1., 1.]])
>>> a[np.tril_indices(4, -1)] = 0
>>> a
array([[ 1., 1., 1., 1.],
[ 0., 1., 1., 1.],
[ 0., 0., 1., 1.],
[ 0., 0., 0., 1.]])

(根据您要对 a 执行的操作,您可能希望在将这些条目归零之前复制一份。)

关于python - Numpy triu 在调用具有无限值的矩阵时生成 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678932/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com