为了账号安全,请及时绑定邮箱和手机立即绑定

为特定列python取每行的正弦

为特定列python取每行的正弦

犯罪嫌疑人X 2021-09-28 19:03:56
我有一个具有连续值的数据集。最后两列的值用于回归预测,我想计算这两列每一行的正弦值并将这个新数据集放入另一个文件。如何创建这个新数据集?编辑:我尝试的代码如下。但我有错误TypeError: list indices must be integers, not tuple。我该如何解决?import numpy as npfor 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 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

在不知道您的数据究竟如何的情况下,我只需要自己制作一些...


>>> 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]])

关于您更新/新添加的代码:您得到 aTypeError因为您的line变量不是numpy数组,更不用说二维数组/矩阵,而只是一个简单的一维纯 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=",")


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信