矩阵相乘和循环之间的根本区别是什么?
What is the underlying difference between multiplying a matrix and looping through?
当你有两个 numPy 矩阵时,你可以调用一个点函数来将它们相乘。或者您可以手动遍历每个值并手动乘以每个值。为什么和什么是速度差异?当然,点功能仍然必须这样做,但较低级别?
是的,这两种方法都必须循环遍历两个矩阵中的值。但是,python 是动态类型的,因此循环体需要检查用于迭代的三个索引的类型,确保支持索引两个输入矩阵,确定从矩阵中提取的值的类型, ...
正如您所说,numpy 实现是较低级别的,并且对输入和输出做出了更强的假设。特别是,矩阵乘法是用静态类型语言(C 或 Fortran——我不太记得了)实现的,这样类型检查的开销就消失了。此外,在低级语言中建立索引是一个相对简单的操作。
当你有两个 numPy 矩阵时,你可以调用一个点函数来将它们相乘。或者您可以手动遍历每个值并手动乘以每个值。为什么和什么是速度差异?当然,点功能仍然必须这样做,但较低级别?
是的,这两种方法都必须循环遍历两个矩阵中的值。但是,python 是动态类型的,因此循环体需要检查用于迭代的三个索引的类型,确保支持索引两个输入矩阵,确定从矩阵中提取的值的类型, ...
正如您所说,numpy 实现是较低级别的,并且对输入和输出做出了更强的假设。特别是,矩阵乘法是用静态类型语言(C 或 Fortran——我不太记得了)实现的,这样类型检查的开销就消失了。此外,在低级语言中建立索引是一个相对简单的操作。