我有一个包含连续值的数据集。最后两列的值用于回归预测,我想计算这两列的每一行的正弦值,然后将此新数据集放到另一个文件中。如何创建这个新数据集?
编辑:我尝试过的代码如下。但是我收到错误TypeError: list indices must be integers, not tuple
。我该怎么解决?
import numpy as np
for i in range (1,4):
f1=open('...'+str(i)+'.dat','r')
f2=open('.....'+str(i)+'.dat','w')
for line in f1:
line=line.split(' ')
print np.sin(line[:,-2:])
f2.write()
f1.close()
f2.close()
谢谢。
答案 0 :(得分:1)
在不知道您的数据看起来如何精确的情况下,我只需要自己做一些...
>>> import numpy as np
>>> M = np.arange(20).reshape((4,5))
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
要获取最后两列的所有行,可以使用[:,-2:]
:
>>> M[:,-2:]
array([[ 3, 4],
[ 8, 9],
[13, 14],
[18, 19]])
然后,仅使用numpy.sin
应用正弦函数:
>>> np.sin(M[:,-2:])
array([[ 0.14112001, -0.7568025 ],
[ 0.98935825, 0.41211849],
[ 0.42016704, 0.99060736],
[-0.75098725, 0.14987721]])
关于更新/新添加的代码:之所以得到TypeError
,是因为您的line
变量不是numpy
数组,更不用说2D数组/矩阵了,只是一个简单的一维纯Python列表。您可以在该列表中仍然使用np.sin
,但是由于它是一维的,因此您将只能使用[-2:]
进行切片。同样,f2.write()
没有任何意义;您没有在文件中写入任何内容,而是仅将结果打印到标准输出中。同样,您正在覆盖您的输入文件。不知道这是否是预期的。相反,您可能想使用numpy.loadtxt
和numpy.savetxt
来读取和保存整个数据集。
尝试这样的事情:
import numpy as np
data = np.loadtxt("input.dat", delimiter=",")
result = np.sin(data[:,-2:])
np.savetxt("output.dat", result, fmt="%.2f", delimiter=",")