【问题标题】:Math in python - converting data files to matricespython中的数学 - 将数据文件转换为矩阵
【发布时间】:2010-06-25 20:52:48
【问题描述】:

今天,当我尝试在 Octave 中编写一个脚本时,我想,这在 python 中可能更容易。确实,列表的数学运算符是轻而易举的,但以格式加载文件并不容易。然后我想,可能是,我只是不熟悉做它的模块!

所以,我有一个包含四列数字的典型数据文件。我想将每一列加载到单独的列表中。是否有我应该使用的模块来简化此操作?

【问题讨论】:

  • 谢谢!有人知道在 OSX 上获取 Numpy 吗?我从 macports 中选择了 py26-numpy,但它似乎正在下载我已经拥有的 python 2.6,所以我可能搞砸了这种方法......

标签: python list io


【解决方案1】:

对于矩阵的快速计算,您应该尝试Numpy,它具有load data from files 的一些功能。

【讨论】:

    【解决方案2】:

    我不知道这是否适用于您的问题,但您可以尝试使用numpy,尤其是它的loadtxtsavetxt 函数。然后,您应该只使用 numpy 数组并避免使用 Python 列表,因为它们不适合数值计算。

    【讨论】:

      【解决方案3】:

      如果您要处理二维数据或非常长的列表,Numpy 是您的理想之选,但如果您不希望进行非常高级的数学运算,则可以使用常规 Python。

      >>> table = []
      >>> a = "32 42 63 1123"
      >>> table.append(a.split(" ")) # this would be some loop where you file.readline()...
      >>> table.append(a.split(" "))
      >>> table.append(a.split(" "))
      >>> table.append(a.split(" "))
      >>> table
      [['32', '42', '63', '1123'], ['32', '42', '63', '1123'],
      ['32', '42', '63', '1123'], ['32', '42', '63', '1123']]
      >>> zip(*table) # this "transposes" the list of lists
      [('32', '32', '32', '32'), ('42', '42', '42', '42'), 
      ('63', '63', '63', '63'), ('1123', '1123', '1123', '1123')]
      >>>
      

      【讨论】:

      • 谢谢,这对于我想做的许多其他事情来说无疑是一种有用的方法。
      【解决方案4】:

      让 Numpy 工作的最简单方法是下载 Enthought Python Distribution。对于 Mac 来说尤其如此,因为从头开始安装 numpy、scipy 等会花费你很多精力。

      用于加载和保存一些文件,例如:

      # This is some comment
      1 2 3 
      4 5 6
      7 8 9
      

      你会的

      import numpy as np
      data = np.loadtxt(input_filename, comment='#')
      

      【讨论】:

      • !!我不想为免费的东西支付 200 美元!没有其他方法可以做到这一点吗?显然 numpy 已经在我的机器上,但是当我尝试使用它时,我得到了各种奇怪的错误。
      • 我猜你不是在学术界,不能利用他们的免费 32 位 Mac。您能否针对在您的机器上尝试使用 numpy 时遇到的详细错误创建另一个问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 2015-06-20
      相关资源
      最近更新 更多