为特定列取每行的正弦值

2024-04-20 16:14:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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


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

谢谢。你知道吗


Tags: 文件数据代码in编辑forclosenp
1条回答
网友
1楼 · 发布于 2024-04-20 16:14:57

不知道你的数据到底是什么样子,我只能自己做一些。。。你知道吗

>>> 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数组,更不是二维数组/矩阵,而是一个简单的一维普通Python列表。你仍然可以在列表中使用np.sin,但是你必须只使用[-2:],因为它是一维的。而且,f2.write()没有意义;您没有向文件写入任何内容,而是将结果打印到std输出。另外,您正在覆盖输入文件;不确定是否有意这样做。相反,您可能希望使用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=",")

相关问题 更多 >