Принимая синус каждой строки для определенного столбца Python - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть набор данных с непрерывными значениями.Значения для двух последних столбцов предназначены для прогнозирования регрессии, и я хочу вычислить синус каждой строки для этих двух столбцов и поместить этот новый набор данных в другой файл.Как я могу создать этот новый набор данных?


Редактировать: код, который я пробовал ниже.Но я получил ошибку 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 голосов
/ 29 декабря 2018

Не зная, как именно выглядят ваши данные, мне просто нужно сделать их самостоятельно ...

>>> 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() не имеет смысла;вы ничего не записываете в файл и вместо этого просто печатаете результат в стандартный вывод.Кроме того, вы перезаписываете свой входной файл;не уверен, что это задумано.Вместо этого вы можете использовать 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=",")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...