1

我正在做我认为对我的数据进行简单回归的事情,但是出了点问题。我使用 csv2rec 读取数据,然后打印回归参数 m 和 b,得到 nan nan。

如果您想预览 csv 文件,这里有一些:

"Oxide","ooh","oh",
"MoO",3.06,0.01,
"IrO",2.79,-0.23,

我想要的是对两行的回归。x = a.ohy = a.ooh

这是我正在使用的脚本

import matplotlib
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from pylab import polyfit

a = mlab.csv2rec('rutilecsv.csv')

fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_xlabel('E_OH / eV', fontsize=12)
ax.set_ylabel('E_OOH / eV', fontsize=12)

(m, b) = polyfit(a.oh, a.ooh, 1)

print m, b

ax.plot(a.oh, a.ooh, 'go')

plt.axis([-2, 3, 1, 6])
plt.show()
4

2 回答 2

1

好的,只是把它放在床上,如果缺少数据,这正是你会得到的症状:

"Oxide","ooh","oh",
"MoO",3.06,0.01,
"IrO",2.79,-0.23,
"ZZ",2.79,,

结果是

In [7]: a.ooh
Out[7]: array([ 3.06,  2.79,  2.79])

In [8]: a.oh
Out[8]: array([ 0.01, -0.23,   nan])

In [9]: polyfit(a.oh, a.ooh, 1)
Out[9]: array([ nan,  nan])

如果您想简单地忽略丢失的数据,那么您可以只传递polyfit两者都存在的点:

In [15]: good_data = ~(numpy.isnan(a.oh) | numpy.isnan(a.ooh))

In [16]: good_data
Out[16]: array([ True,  True, False], dtype=bool)

In [17]: a.oh[good_data]
Out[17]: array([ 0.01, -0.23])

In [18]: a.ooh[good_data]
Out[18]: array([ 3.06,  2.79])

In [19]: polyfit(a.oh[good_data], a.ooh[good_data], 1)
Out[19]: array([ 1.125  ,  3.04875])
于 2012-08-02T14:16:41.150 回答
0

要检查的两件事:

  1. 值是否转换为属性

  2. 尝试使用 a['oh'] 和 a['ooh'] 来访问向量

并且可能在读取文件时使用选项名称来指定列名。

于 2012-08-02T14:04:34.373 回答