【问题标题】:What are the limits of vectorization?矢量化的限制是什么?
【发布时间】:2017-06-22 11:51:34
【问题描述】:

我正在使用多维矩阵(大约 100 维左右,见下文)。我的矩阵是 NumPy 数组,我主要将它们相乘。

NumPy 是否关心(关于速度或准确性)我要求它以什么形式将这些矩阵相乘? IE。在执行乘法之前将它们重塑为线性数组是否有意义?我用随机矩阵做了一些自己的测试,这似乎无关紧要,但想对此有一些理论见解。

我想在 Python 处理它们变得缓慢之前,矩阵的大小和它们的大小是有限制的。有没有办法找到这个限制?


我有几个物种(生物学)并想为这些物种中的每一个分配一个适应度。然后我想看看这些不同的技巧如何影响比赛的结果。我想检查所有物种的所有可能的适应度组合。我的矩阵有很多维度,但所有维度都很小。

【问题讨论】:

  • 你的乘法是什么意思?
  • 正规乘法a*bab 的形状是否重要(只要它们具有相同的形状)?
  • 需要注意的是,NumPy 在编译的 C 或 C++ 代码中执行这些操作(甚至调用 Fortran 数值库(?)),所以它不会是“Python” 变慢或不变慢。 (不过,由于计算仍然发生在 Python 进程和线程中,当然,这仍然是您“感受”它的地方。)
  • 注意 numpy 数组的硬编码限制为 32 维

标签: python arrays numpy vectorization


【解决方案1】:

对于元素乘法没关系,展平数组不会改变任何事情。请记住:数组,无论其维度如何,都线性保存在 RAM 中。如果你在乘法之前展平数组,你只是改变了 NumPy 向你呈现数据的方式,RAM 中的数据永远不会被触及。将 1D 或 100D 数据相乘是完全相同的操作。

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2010-12-03
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2014-07-19
    相关资源
    最近更新 更多