JuliaDB 或 DataFrame 比普通数组更快吗?

2024-02-03

我想知道普通数组与 JuliaDB 或 DataFrame 在大型数据集(很大但仍然适合内存)上进行计算的性能是否存在差异?

我可以使用普通数组和算法来进行排序、分组、归约等。那么为什么我需要 JuliaDB 或 DataFrame?

我有点理解为什么 Python 需要 Pandas - 因为它将慢速的 python 转换为快速的 C。但是为什么 Julia 需要 JuliaDB 或 DataFrame - Julia 已经很快了。


这可能是一个广泛的话题。让我重点介绍我认为的关键功能。

DataFrames.jl 或 JuliaDB.jl 相对于标准数组有哪些优势

  1. 它们允许您存储不同类型的数据列。您可以在数组中执行相同的操作,但它们必须是数组Any一般来说,与具有具体类型的数据列相比,这会更慢并且占用更多内存。
  2. 您可以使用名称访问列。然而,这是次要特征 - 例如NamedArrays.jl 提供具有命名维度的类数组类型。
  3. 额外的好处是,有一个生态系统建立在列有名称的事实之上(例如,连接两个DataFrames 或使用 GLM.jl 构建 GLM 模型)。

这种类型的存储(具有名称的异构列)是关系数据库中表的表示。

DataFrames.jl 和 JuliaDB.jl 有什么区别

  1. JuliaDB.jl支持分布式并行; DataFrames.jl 的正常使用假设数据适合内存(您可以使用SharedArray但这不是设计的一部分),如果你想并行计算,你必须手动完成;
  2. JuliaDB.jl 支持索引,而 DataFrames.jl 目前不支持;
  3. Column types of JuliaDB.jl are stable and for DataFrames.jl currently they are not. The consequences are:
    • 当每次创建新类型的数据结构时使用 JuliaDB.jl 时,必须重新编译应用于该类型的所有函数(对于大型数据集可以忽略,但在处理许多异构小数据集时可以具有可见的性能影响);
    • 使用 DataFrames.jl 时,在某些情况下,您必须使用特殊技术来确保类型推断以实现高性能(最值得注意的是所讨论的屏障函数)here https://github.com/bkamins/Julia-DataFrames-Tutorial/blob/master/11_performance.ipynb).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JuliaDB 或 DataFrame 比普通数组更快吗? 的相关文章

  • 与 Julia 实时绘图

    我正在尝试绘制一个与 Julia 一起实时演化的函数 为此 当我尝试完全应用给定的示例时 我发现 GR 包可以在 Julia 中使用here https pgi jcns fz juelich de pub doc anim html im
  • 优化 Julia 中的递归函数

    我编写了一个 Julia 代码 它计算高斯函数的积分 并且我有一种被一遍又一遍调用的核函数 根据 Julia 内置Profile模块 这是我在实际计算过程中花费大部分时间的地方 因此我想看看是否有任何方法可以改进它 这是一个递归函数 我以一
  • 获取 Julia Lang 中当前变量的列表

    我是朱莉娅 朗的新手 我是Matlab背景出来的 在Matlab中 当按下whos命令我将获取当前范围内的所有变量 而且 我可以将它们存储在另一个变量中 例如x whos Julia 中是否存在这样的命令 Matlab 中的示例代码 gt
  • 为什么我的 Julia 代码运行速度比 JavaScript 慢?

    最近 我对 Julia lang 很感兴趣 因为它声称是一种具有接近 C 性能的动态语言 然而 到目前为止我的经验并不好 至少在性能方面 我正在编写的应用程序需要随机访问特定的数组索引 然后将它们的值与其他特定的数组索引进行比较 经过多次迭
  • 处理 Julia 中 kwargs 的类型

    我该如何使用kwargs在 Julia 函数中并声明其类型以提高速度 function f x Float64 kwargs kwargs Dict kwargs if haskey kwargs c c Float64 kwargs c
  • 关于 Julia 中的 ndarray 创建:在额外维度中堆叠

    我想将以下 python 代码转换为 julia import numpy as np x np random random 4 5 6 y np array x x x 2 x 3 x 4 x print y shape gt 2 3 4
  • 有什么方法可以获取模块中定义的函数列表?

    是否有任何内省的魔法可以给我一个模块中定义的函数列表 module Foo function foo foo end function bar bar end end 一些神话般的功能 例如 functions in Foo 这将返回 fo
  • Julia 作用域:为什么这个函数会修改全局变量?

    我是 Julia 的新手 但到目前为止我还是它的粉丝 但根据多年的 R 编程经验 一些范围规则让我感到困惑 我们来看看这个函数 这与我的预期完全一致 function foo1 x y x t 1 while t lt 1000 t 1 y
  • Julia 中的 @code_native、@code_typed 和 @code_llvm 有什么区别?

    在使用 julia 时 我想要有一个类似于 python 的功能dis模块 通过网络 我发现 Julia 社区已经解决了这个问题并给出了这些 https github com JuliaLang julia issues 218 https
  • Julia 中的内存分配

    将程序从 Python 翻译成 Julia 后 我非常不满意 对于小 非常小的输入 Python 更快 对于中等输入 Julia 更快 但没那么快 对于大输入 Python 更快 我认为原因是我不明白内存分配是如何工作的 这里自学者 没有C
  • 在 julia 中打开 csv 文件时转义序列无效

    当打开 CSV 文件时julia它给 无效的转义序列 error 无效的转义序列 https i stack imgur com U9hn0 png julia gt using CSV julia gt wikiEVDraw CSV re
  • 如何更改julia(1.8.5)默认安装包的位置?

    如何更改julia 1 8 5 默认安装包的位置 我不想把包安装到c盘 因为pwd 和homedir 都默认到c盘 如何修改 我想每次都像安装python包一样打开Julia 有固定的安装路径 例如user Base User site 我
  • 有没有办法在 writetable() 中使用字符串作为分隔符 - Julia

    当使用 writetable 将数据帧写入文件时 我希望能够将分隔符设为空格然后逗号 即 作为分隔符 我知道 writetable 只能选择将单个字符作为分隔符参数 是否有可能的解决方法能够将字符串作为分隔符 或者 是否可以简单地在数据框中
  • 在 Julia 中提取参数类型

    假设我在 Julia 中编写了一个函数 它接受Dict K V 作为参数 然后创建类型的数组Array K 1 and Array V 1 我怎样才能提取类型K and V来自 Dict 对象 以便我可以使用它们来创建数组 斯文和约翰的答案
  • @distributed 似乎有效,函数返回很不稳定

    我正在学习如何在 Julia 中进行并行计算 我在用着 sync distributed在 3x 嵌套的开始处for循环并行化事物 参见底部的代码 从线路上看println errCmp row col 我可以观察数组的所有元素errCmp
  • 具有单变量优化的 NLopt

    任何人都知道 NLopt 是否适用于单变量优化 尝试运行以下代码 using NLopt function myfunc x grad x 2 end opt Opt LD MMA 1 min objective opt myfunc mi
  • 带有 return 语句的 Julia @parallel for 循环

    如何在满足条件时立即返回所有工作人员的函数中编写并行 for 循环 IE 像这样的东西 function test n sync parallel for i in 1 1000 statement if condition return
  • 如何在一张图中显示多个相邻的图像?

    我正在使用 Julia PyPlot 和 Images 来处理一些图片 因为显示几十个图是不可能的 所以我想堆叠图像 如下所示 我有图像数据Array Array Float64 2 1 已经正常化了 以下代码仅显示最后一个最小的图像 该数
  • Julia:如何使用 PyPlot 创建不同大小的子图?

    我想创建一个包含多个绘图的图形 不过我希望能够使每个图具有不同的大小 例如 我希望第一个子图的宽度大约是第二个子图的两倍 我希望做这样的事情 using PyPlot a rand 500 900 b rand 500 400 notice
  • 获取参数类型的参数

    假设我定义了一个这样的类型 type Point Tx Ty end 然后我创建一个这种类型的变量 例如 a Point Int64 something 现在 我只知道我可以获得以下类型a by typeof a 那是 Point Int6

随机推荐