Python中是否有很好的方法可以像数据构造/容器一样对矩阵进行矢量化操作?使用的相应数据结构是什么?
(我可以观察和阅读使用vectorize或applymap的pandas和numpy element-wise操作(也可能是沿行/列的轴应用/应用的情况)与for循环相比,速度进步并不大。 考虑到在尝试使用它们时,有时会因为循环通常稍微容易一些而弄乱数据类型的特性,有什么好处?可读性?)
在比较循环和向量化操作时,是否有办法实现类似于Matlab中的性能差距?
(注意它不是为了打击numpy或pandas,这些都很棒,整个矩阵操作都可以,只是当你必须进行逐元素操作时,它会变慢)。
编辑解释背景:
我只是想知道,因为我收到了不止一次的回答,提到apply等等实际上与for循环类似。这就是为什么我想知道是否有类似的功能以这样的方式实现它会表现得更好。实际问题是多种多样的。他们只需要在元素方面,实际上,不是“做总和,产品,整个矩阵的任何东西”。我做了很多与差分输出的比较,有时基于其他矩阵,所以我不得不使用复杂的函数。但由于矩阵很大并且实现依赖于“for loop like”机制,最后我觉得我的程序在更重要的数据集上不能很好地工作。因此我的问题。但我不是在寻找评论,只是知识。
答案 0 :(得分:2)
您需要提供一个具体示例。
普通的每元素MATLAB或Python函数通常无法进行矢量化。在MATLAB和Python中,矢量化的重点是将操作卸载到设计用于统一数据阵列的更快的底层C或Fortran库上。对于在标量上运行的函数,无法在MATLAB或Python中进行此操作。
对于作为整体对数组或矩阵进行操作的函数(例如数学运算符,求和,平方等),MATLAB和Python的行为相同。事实上,他们使用大多数相同的底层C和Fortran库来进行计算。
因此,您需要显示您想要执行的实际操作,然后我们可以看到是否有一种方法可以对其进行矢量化。
如果它是工作代码并且您只是想提高其性能,那么Code Review堆栈交换站点可能是更好的选择。