代码之家  ›  专栏  ›  技术社区  ›  hatmatrix

R用户的Numpy?

  •  8
  • hatmatrix  · 技术社区  · 16 年前

    长期使用R和Python的用户。我使用R进行日常数据分析,而Python则用于文本处理和shell脚本编写方面的任务。我正在处理越来越大的数据集,当我得到这些文件时,它们通常是二进制或文本文件。我通常做的事情是应用统计/机器学习算法,在大多数情况下创建统计图形。我有时在SQLite中使用R,为迭代密集型任务编写C;在研究Hadoop之前,我正在考虑投资一些时间在NumPy/Scipy上,因为我听说它有更好的内存管理(而且对于一个有我背景的人来说,向NumPy/Scipy的过渡似乎没那么大),我想知道是否有人有使用这两个方面的经验,可以对这方面的改进发表意见,以及NumPy中是否有处理这个问题的习惯用法。(我也知道Rpy2,但不知道Numpy/Scipy是否能满足我的大部分需求)。谢谢-

    3 回复  |  直到 13 年前
        1
  •  12
  •   lgautier    16 年前

    R在寻找一个进行机器学习和统计的环境时的优势无疑是它的库的多样性。据我所知,SciPy+scikets不能替代CRAN。

    关于内存使用,R使用的是pass-by-value范式,而Python使用的是pass-by-reference。传递值可以产生更“直观”的代码,传递引用可以帮助优化内存使用。Numpy还允许在数组上有“视图”(类似于没有复制的子数组)。

    就速度而言,对于访问数组中的单个元素,纯Python比纯R快,但是在处理numpy数组时,这种优势就消失了( benchmark ). 幸运的是,Cython让一个人很容易得到严重的速度改善。

    如果使用大数据,我发现使用Python(HDF5)可以更好地支持基于存储的阵列。

        2
  •  11
  •   doug    16 年前

    我每天都用NumPy和R。

    对于繁重的数字运算,我更喜欢NumPy而不是R(包括R包,比如‘Matrix’)。我发现语法更干净,函数集更大,计算速度更快(尽管我并不觉得R慢)。例如NumPy的广播功能,我认为R中没有类似的功能。

    例如,要从csv文件读入数据集并“规范化”它以输入到ML算法(例如,平均中心然后重新缩放每个维度),只需要以下步骤:

    data = NP.loadtxt(data1, delimiter=",")    # 'data' is a NumPy array
    data -= NP.mean(data, axis=0)
    data /= NP.max(data, axis=0)
    

    另外,我发现在编写ML算法时,我需要能够对元素进行操作并且也能理解线性代数的数据结构(例如,矩阵乘法、转置等)。NumPy可以很容易地创建这些混合结构(没有操作符重载或子类化等)。

    所以,有几点建议——总体上,特别是,考虑到你问题中的事实:

    • 安装NumPy和Scipy . 作为一个粗略的指南,NumPy提供了 核心数据结构(尤其是 ndarray)和SciPy(这是 实际上比

    • 安装存储库版本 尤其是w/r/t NumPy,因为 易于安装

    • NumPy/SciPy有几个 modules 专门针对机器 学习/统计,包括 聚类 统计 包裹。

    • 一般计算,但是 尤其是速度更快, 优化 和 线性代数

    • SciKit s , 不 SciPy库;您需要单独安装它们。 一套方便包装 安 (近似近邻),以及 学习

        3
  •  2
  •   denis    16 年前

    我不能评论R,但这里有几个关于Numpy/Scipy和ML的链接:

    还有一本书(我只看过它的一些 code ):

    如果你能在Numpy/Scipy学习曲线上收集一些你的经验笔记, 这可能对其他人有用。