Как (идиоматически) читать индексированные массивы из текстового файла с разделителями?Python

Программы на Python
Anonymous
Как (идиоматически) читать индексированные массивы из текстового файла с разделителями?

Сообщение Anonymous »

У меня есть текстовые файлы из внешнего источника, отформатированные следующим образом:

Код: Выделить всё

       0       0    -0.105961      0.00000
1       0     -1.06965      0.00000
1       1   -0.0187213    -0.240237
2       0    -0.124695      0.00000
2       1    -0.178982    0.0633255
2       2     0.760988    -0.213796
3       0     -1.96695      0.00000
3       1    0.0721285    0.0491248
3       2    -0.560517     0.267733
3       3    -0.188732    -0.112053
4       0   -0.0205364      0.00000
⋮        ⋮        ⋮              ⋮
40      30     0.226833    -0.733674
40      31    0.0444837    -0.249677
40      32    -0.171559    -0.970601
40      33    -0.141848    -0.137257
40      34    -0.247042    -0.902128
40      35    -0.495114     0.322912
40      36     0.132215    0.0543294
40      37     0.125682     0.817945
40      38     0.181098     0.223309
40      39     0.702915     0.103991
40      40      1.11882    -0.488252
где первые два столбца — это индексы двумерного массива (скажем, i и j), а третий и четвертый столбцы — значения для двух двумерных массивов. массивы (скажем, p[:,:] и q[:,:]). Каким идиоматическим способом в Python/Julia можно было бы прочитать это в два 2d-массива?
Мы можем сделать некоторые предположения: массивы имеют нижнюю треугольную форму (т. е. существуют только значения ( или не равны нулю) для j
Текущая реализация предполагает, что максимальное значение i и j равно 40, и действует следующим образом: (минимальный рабочий пример Джулии):

Код: Выделить всё

using OffsetArrays
using DelimitedFiles: readdlm

n = 40

p = zeros(0:n, 0:n)
q = zeros(0:n, 0:n)

open(filename) do infile
for i = 0:n
for j = 0:i
line = readline(infile)
arr = readdlm(IOBuffer(line))
p[i,j] = arr[3]
q[i,j] = arr[4]
end
end
end
Обратите внимание, что в этом примере также предполагается, что индекс j изменяется быстрее всего, что обычно верно, но при этом фактически игнорируются первые два столбца данных.< /p>
Однако я ищу решение, которое делает меньше предположений о файле данных (возможно, только нижний треугольный вариант и увеличивающий индекс). Каким был бы «естественный» способ сделать это в Julia или Python?


Подробнее здесь: https://stackoverflow.com/questions/783 ... -text-file

Вернуться в «Python»