Не зная, как именно выглядят ваши данные, мне просто нужно сделать их самостоятельно ...
>>> 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=",")