【问题标题】:What is the underlying difference between multiplying a matrix and looping through?乘以矩阵和循环之间的根本区别是什么?
【发布时间】:2017-04-15 22:03:56
【问题描述】:

当你有两个 numPy 矩阵时,你可以调用一个点函数来将它们相乘。或者您可以手动遍历每个值并手动乘以每个值。为什么和什么是速度差异?当然点功能仍然必须这样做,但较低级别?

【问题讨论】:

    标签: python performance numpy processing-efficiency


    【解决方案1】:

    是的,这两种方法都必须遍历两个矩阵中的值。但是,python 是动态类型的,因此循环体需要检查用于迭代的三个索引的类型,确保支持对两个输入矩阵进行索引,确定从矩阵中提取的值的类型,...

    正如您所说,numpy 实现是较低级别的,并且对输入和输出做出了更强的假设。特别是,矩阵乘法是用静态类型语言(C 或 Fortran——我不太记得)实现的,这样类型检查的开销就消失了。此外,低级语言的索引是一个相对简单的操作。

    【讨论】:

    • 除此之外,仅在显式 Python 循环中循环比通过编译代码循环要慢。如果你也在 Python 中做算术而不是让 Numpy 来做,那么在机器浮点数或整数与等效的 Python 数字对象之间来回转换会产生开销,以及用 Python 的不可变数字进行算术运算的速度很慢对象。
    猜你喜欢
    • 2013-04-11
    • 2014-09-04
    • 2011-11-04
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多