arrays - 在 Julia 中使用巨大数组的有效方法
问题描述
我有大量的实验数据,这些数据是用 Python 编写的 UI 收集的。这些数组的大小约为数十 GB,存储为无符号整数并通过已知因子转换为浮点数。此数组的典型大小为 64 x 64 x 10^5 个条目。在 pythonic UI 中,一切都运行得非常顺利。我们几乎实时地进行可视化,可以绘制每个一维子阵列(在长方向上)的许多行为,加载和关闭它们。然后将它们保存为 hdf5 文件。
当我尝试在一台更好的计算机上在 Julia 中对它们进行数字处理时,一切都变得迟缓了。超级慢。反应迟钝。所以我显然必须做一些非常错误的事情。
代码的实际示例将是以下函数:
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 UI 似乎比我的 Julia 规则响应更快。我对此感到非常困惑。
用 PyPlot.jl 绘制它们也需要很长时间,但这可能是另一个问题。
解决方案
推荐阅读
- mongodb - MongoDB:在其他字段值中查找字段值
- bootstrap-4 - Reactstrap 按钮边距显示没有效果
- sql - 如何查找日期并找到最接近的匹配项
- java - 在java中将文件导出为xlsx或csv格式
- spring-boot - 为什么注册 Eureka 集群时会报错
- apache-spark - 如何在 Apache Spark 的 MLlib (Python) 中为逻辑回归模型分配类权重
- algorithm - 解决方法 Go 的地图指针问题
- ios - UIProgressView 进度 色调 颜色 颜色 错误
- javascript - 使用 .after() 一个接一个地插入一个元素并不能完全起作用
- javascript - 将行作为对象添加到键并使用反应发送到后端