Можно ли читать скалярные и векторные массивы из произвольно заполненного текстового файла, используя 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 файл, а затем использовать его позже в коде.

Спасибо,

0 ответов

Другие вопросы по тегам