对特定列python取每一行的正弦值

时间:2018-12-29 19:31:50

标签: python numpy

我有一个包含连续值的数据集。最后两列的值用于回归预测,我想计算这两列的每一行的正弦值,然后将此新数据集放到另一个文件中。如何创建这个新数据集?


编辑:我尝试过的代码如下。但是我收到错误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()

谢谢。

1 个答案:

答案 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.loadtxtnumpy.savetxt来读取和保存整个数据集。

尝试这样的事情:

import numpy as np
data = np.loadtxt("input.dat", delimiter=",")
result = np.sin(data[:,-2:])
np.savetxt("output.dat", result, fmt="%.2f", delimiter=",")