-1

第二次编辑

这就是“stokes_line”的生成方式:

os.system('pdv -t %s > temp.txt ' % epoch_name)
    stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')],     skip_header=1)

os.system('vap -nc "mjd" %s >> mjd.txt' % new_y[i])
stokes_list[b] = stokes_line

“pdv”是来自另一个程序的命令,它生成了“stokes_line”中使用的一些数字。

stokes_list 每次都会在循环中添加一个新的 stokes_line 。

编辑:

stokes_line 是使用 numpy.genfromtxt 命令创建的(因此从 txt 文件中提取)并由浮点数组成,它们看起来像这样:

[(0.00126596,) (0.000621272,) (0.00058694,) ..., (0.0015368,) (0.000926448,) (7.95851e-05,)]

一堆一起组成一个 stokes_list,每个 stokes_line 由相同数量的浮点数组成。

问题是因为 genfromtxt 没有创建一个全是方括号的列表,而是其他东西(它是否称为序列)?


我编写了一个可以在我的笔记本电脑(python 版本 2.7.3)上找到的 python 代码,但它似乎不能在我的大学桌面(python 版本 2.5.2)上运行。

我不认为在这里显示大量代码会有用,但错误消息在这两行的第二行:

os.system('vap -nc "mjd" %s >> mjd.txt' % new_y[i])
stokes_list[b] = stokes_line

其中“vap”是来自另一个程序的命令,它返回一些值。无论如何,问题的症结在于我只有在旧版本的 Python 上运行时才会收到以下错误消息:

ValueError:使用序列设置数组元素。

现在我做了一些研究,人们说问题是由于某些列表的长度不兼容 - 但如果是这种情况,为什么当我在新版本的 Python 上运行它时它工作正常。

任何帮助都会很棒,谢谢!

4

2 回答 2

3

.formatFormatter该类是在 2.6 中添加的。

os.system('vap -nc "mjd" %s >> mjd.txt' % new_y[i])应该管用。

于 2012-09-10T06:44:51.197 回答
0

当您使用np.genfromtxt(…, usecols=3, dtype=[("stokesI","float")])时,您正在构建一个只有一个字段 ( "stokesI") 的结构化数组。当然,当你打印数组时,会出现这样的结构:

[(0.00126596,) (0.000621272,) (0.00058694,) ..., (0.0015368,) (0.000926448,) (7.95851e-05,)]

每个项目都由np.void一个命名的浮点字段组成。

看起来有点浪费,您可以将表达式简化为:

np.genfromtxt(…,usecols=3, dtype=float)

然后你会得到:

[  1.26596000e-03   6.21272000e-04   5.86940000e-04 ...  1.53680000e-03
   9.26448000e-04   7.95851000e-05]

它在较旧版本的 Python 上明显失败的可能原因是您使用的是较旧版本的 NumPy,例如 1.4 或 1.5。since的构造有了一些改进ndarrays(更好地处理生成器,从字符串自动转换……)

于 2012-09-10T18:50:17.757 回答