Можно ли читать скалярные и векторные массивы из произвольно заполненного текстового файла, используя numpy.genfromtxt?
У меня есть большой текстовый файл, который включает в себя три массива. Один массив позиций, который представляет собой вектор в форме списка из списка координат (x, y, z) и два других скалярных массива, каждый в форме списка. Вот как файл сохраняется:
[[ 16.40 28.6 38.5]
[ -3.49 26.6 26.3]
...
[ 9.74 -13.3 8.88]]
[ 1.67 1.54 1.48 1.39 1.34
1.56 1.91 1.58 1.99 1.31
...
2.03 1.04 2.63 2.56 1.19]
[ 1.04e+07 1.38e+07 1.24e+07 1.80e+07
1.55e+07 2.00e+07 1.75e+07 1.01e+07
...
4.47e+07 5.09e+07 1.10e+07]
Я хотел бы назвать первый массив positions
второй массив radiuss
и третий массив masss
,
Теперь я хотел бы использовать этот файл для извлечения некоторой информации, поскольку выполняется некоторый код Python. Как MWE, можно думать о чем-то вроде этого:
for i, j, k in zip(positions, radiuss, masss):
if 7.0 <= log10(k) <= 8.0:
value = (np.sqrt(pow(i[0], 2) + pow(i[1], 2) + pow(i[2], 2)) <= j)
В коде мне понадобятся отдельные координаты x, y и z в каждом прогоне, и, следовательно, мне нужно будет выбрать первые элементы списков внутри positions
массив через i[0]
вторые элементы через i[1]
третьи элементы через i[2]
, Я также хотел бы подобрать второй массив как j
и третий массив как k
,
Я не знаю, как сделать эти массивы доступными для кода выше. Вот одна вещь, которую я попробовал, и она не сработала: попытка устранить разделители (в данном случае пустые места) с помощью следующей строки кода:
open('file_name.txt').read().split(' ')
Но это приводит к следующей ерунде:
['[', '1.04131050e+07', ' 1.80056980e+07\n', '..., ' 3.33190880e+08\n']
в результате чего:
TypeError: ufunc 'log10' не поддерживается для типов ввода, и входы не могут быть безопасно приведены к каким-либо поддерживаемым типам в соответствии с правилом приведения "safe".
Эти массивы уже вычислены в некоторый момент в исходном коде, и поэтому я хочу сделать это, чтобы сделать их доступными для последующего использования. Код длинный, так что к тому времени, когда эти массивы необходимы, они больше не доступны, так как они создаются внутри if
заявление под одним function
под одним class
и все же они нужны под каким-то другим function
того же class
, Я не очень хорош в работе с классами и, чтобы избежать этого, я просто хочу сохранить то, что уже произведено как .txt
файл, а затем использовать его позже в коде.
Спасибо,