在Python中使用scipy/numpy将数组值设为-inf

4 投票
2 回答
9967 浏览
提问于 2025-04-16 07:57

我有一个数组,长得像这样:

a = [ -22  347 4448  294  835 4439  587  326]

我想把里面小于或等于0的值都设成负无穷大(-inf)。我试过下面的方法:

a[where(a <= 0)] = -inf

但是这样做的时候,我遇到了一个错误:

OverflowError: cannot convert float infinity to integer

有人知道这是为什么吗?我该怎么解决这个问题?“where”这个函数应该能找到所有小于或等于0的值的索引,然后我只需要把这些值设成负无穷大就行了。谢谢!

2 个回答

2

如果你的数组类型是整数,那你就不能把任何值设置为 -infinity(负无穷大)。这个值在IEEE浮点数中是一个特殊的值。解决这个问题的简单方法就是使用浮点数类型的数组。

10

你的数组 a 是一个整数数组。整数不能表示无穷大,只有浮点数才能做到这一点。所以有两种解决方法:

  1. 可以换成浮点数数组。

  2. 也可以使用一个很大的负整数,比如 -2147483648,如果你使用的是32位整数。虽然这不是无穷小,但在某些情况下,它的表现会类似。

此外,你可以简单地写

a[a <= 0] = <somevalue>

撰写回答