gpt4 book ai didi

python - numpy.isfinite() 中的意外异常

转载 作者:太空狗 更新时间:2023-10-29 17:31:34 26 4
gpt4 key购买 nike

由于我不明白的原因,我得到了这个异常。比较复杂,我的np.array v 是从哪里来的,但是这里是异常发生时的代码:

print v, type(v)

for val in v:
print val, type(val)

print "use isfinte() with astype(float64): "
np.isfinite(v.astype("float64"))

print "use isfinite() as usual: "
try:
np.isfinite(v)
except Exception,e:
print e

这给出了以下输出:

[6.4441947744288255 7.2246449651781788 4.1028442021807656
4.8832943929301189] <type 'numpy.ndarray'>

6.44419477443 <type 'numpy.float64'>
7.22464496518 <type 'numpy.float64'>
4.10284420218 <type 'numpy.float64'>
4.88329439293 <type 'numpy.float64'>

np.isfinte() with astype(float64):
[ True True True True]

np.isfinte() as usual:
ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

我不明白 TypeError。所有元素都是 np.float64,应该没问题。也许是一个错误?这个错误有时只会发生,但我找不到数组之间的差异。始终具有相同的类型。

提前致谢。

编辑:工作示例:

数据结构和上面显示的一样小。

import pandas as pd
import numpy as np


def forward_estim(H,end):

old_idx = H.index
new_idx = pd.period_range(old_idx[-1],end,freq=old_idx.freq)

H_estim = pd.DataFrame(columns=["A","B","C","D"],index=new_idx)

H_chg = H.values[1:]-H.values[:-1]
mean_ = H_chg.mean()
std_ = H_chg.std()

H_estim.ix[0] = H.ix[-1]

for i in range(1,len(H_estim)):
H_estim.A[i] = H_estim.A[i-1] + mean_ + std_/2
H_estim.B[i] = H_estim.B[i-1] + mean_ + std_
H_estim.C[i] = H_estim.C[i-1] + mean_ - std_
H_estim.D[i] = H_estim.D[i-1] + mean_ - std_/2

return H_estim.ix[1:]


H_idx = pd.period_range("2010-01-01","2012-01-01",freq="A")
print H_idx

H = pd.Series(np.array([2.3,3.0,2.9]),index=H_idx)
print H

H_estim = forward_estim(H,"2014-01-01")
print H_estim

np.isfinite(H_estim.values.astype("float64"))
print "This works!"

np.isfinite(H_estim.values)
print "This does not work!"

这里使用:

MacOsX Mavericks、Python 2.7.6、numpy 1.8.1、 Pandas 0.13.1

最佳答案

H_estim.values 是一个数据类型为 object 的 numpy 数组(查看 H_estim.values.dtype):

In [62]: H_estim.values
Out[62]:
array([[3.4000000000000004, 3.6000000000000005, 2.7999999999999998, 3.0],
[3.9000000000000004, 4.3000000000000007, 2.6999999999999993,
3.0999999999999996]], dtype=object)

In [63]: H_estim.values.dtype
Out[63]: dtype('O')

对象数组中,存储在数组内存中的数据是指向python对象的指针,而不是对象本身。在这种情况下,对象是 np.float64 实例:

In [65]: H_estim.values[0,0]
Out[65]: 3.4000000000000004

In [66]: type(H_estim.values[0,0])
Out[66]: numpy.float64

所以在很多方面,这个数组看起来和行为都像一个 np.float64 值的数组,但它并不相同。特别是,numpy ufunc(包括 np.isfinite)不处理对象数组。

H_estim.values.astype(np.float64) 将数组转换为数据类型为 np.float64 的数组(即数组元素是实际 float 的数组点值,而不是指向对象的指针)。将以下内容与上面显示的 H_estim.values 输出进行比较。

In [70]: a = H_estim.values.astype(np.float64)

In [71]: a
Out[71]:
array([[ 3.4, 3.6, 2.8, 3. ],
[ 3.9, 4.3, 2.7, 3.1]])

In [72]: a.dtype
Out[72]: dtype('float64')

关于python - numpy.isfinite() 中的意外异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23808327/

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