Эффективный способ работы с огромными массивами в Юлии - PullRequest
1 голос
/ 05 июня 2019

У меня есть очень большие массивы экспериментальных данных, которые собираются с помощью пользовательского интерфейса, написанного на Python. Размеры массивов составляют порядка десятков гигабайт, они хранятся как целые числа без знака и преобразуются с помощью известных факторов в числа с плавающей запятой. Типичные размеры для этих массивов - 64 на 64 на 10 ^ 5 записей. В питоническом интерфейсе все работает очень гладко. У нас есть визуализации в реальном времени, мы можем построить много поведений каждого одномерного подмассива (в длинном направлении), загрузить и закрыть их. Затем они сохраняются как файлы hdf5.

Когда я пытаюсь обработать их численно в Юлии на гораздо лучшем компьютере, все становится вялым. Супер медленный Отсутствие реакции. Поэтому я, очевидно, что-то делаю очень неправильно.

Во всех примерах кода могут быть следующие функции:


function centerandreshapedata(xxs::Array, factor::Number)
    irrrelevant,largo=size(xxs)
    aux=Array{Int16}(undef, 64,64, largo);
    result=Array{Float16}(undef, 64,64, largo);
    for j=1:64,k=1:64
        aux[k,j,:]=xxs[j+(k-1)*64,:]
    end
    result=((aux.-2048).*factor);
    # factor is converting the floats to Float64
    result=convert.(Float16, result)
    return result
end


function DiscreteLaplacian(data)
    temp=copy(Datos)
    (mu,lu)=size(Datos)    
    izq=reshape(temp[1,:],(1,lu))
    der=reshape(temp[end,:],(1,lu))
    #Padding the data
    temp=vcat(izq, temp, der)
    temp=hcat(temp[:,1], temp, temp[:,end])
    largo,ancho=size(temp)
    aux=Array{Float32}(undef, 3,3)
    result=zeros(size(temp))

 for j=2:largo-1, k=2:ancho-1
        aux=temp[j-1:j+1,k-1:k+1]
        result[j,k]=sum(LaplacianKernel.*aux)
    end
    #DO  Crop the borders
    result=result[2:end-1,2:end-1]
    return result
end

Типичные вещи, которые мне нужно сделать с этими данными, - это изменение формы, применение операторов конечных разностей и других линейных преобразований, поиск по частям для определенных значений и тому подобное. Пользовательский интерфейс Python, кажется, гораздо отзывчивее, чем моя Джулия. Я очень озадачен этим.

Кроме того, составление графика с помощью PyPlot.jl занимает много времени, но это может быть другой вопрос.

...