Python 中的批量代数运算
Batch algebraic operations in Python
我在 Python 中使用 for
来填充数组。目前我遍历数组中的所有元素,对于每个索引,我从另一个数组中检索一些相关信息,然后执行一个操作。
这是当前代码
for idx, vertex_color in enumerate(self.vertex_colors):
coefficients = self.cubic_coefficients[idx*3:(idx*3)+3]
# Applies cubic regression to obtain regressed mean amplitude
c[idx] = coefficients[0] * current_beta**2 + coefficients[1] * current_beta + coefficients[2]
但是我的向量 self.vertex_colors
非常大,因此这个 for 循环是我的瓶颈。有没有办法并行化或使用单个命令执行这些操作?在某种程度上,我想做 bsxfun
在 MATLAB 中所做的事情,但对于任意函数。
对于您的具体情况,如果 coefficients
是 numpy.array
。
,您可以不用这种方式进行循环
import numpy
coefficients = numpy.array([1, 2, 3, 1, 2, 3])
current_beta = 1
c = (coefficients[0::3] * current_beta**2
+ coefficients[1::3] * current_beta
+ coefficients[2::3])
这适用于任何长度的系数。这里用于切片的语法基本上从点开始,然后取每第 3 个元素。
我在 Python 中使用 for
来填充数组。目前我遍历数组中的所有元素,对于每个索引,我从另一个数组中检索一些相关信息,然后执行一个操作。
这是当前代码
for idx, vertex_color in enumerate(self.vertex_colors):
coefficients = self.cubic_coefficients[idx*3:(idx*3)+3]
# Applies cubic regression to obtain regressed mean amplitude
c[idx] = coefficients[0] * current_beta**2 + coefficients[1] * current_beta + coefficients[2]
但是我的向量 self.vertex_colors
非常大,因此这个 for 循环是我的瓶颈。有没有办法并行化或使用单个命令执行这些操作?在某种程度上,我想做 bsxfun
在 MATLAB 中所做的事情,但对于任意函数。
对于您的具体情况,如果 coefficients
是 numpy.array
。
import numpy
coefficients = numpy.array([1, 2, 3, 1, 2, 3])
current_beta = 1
c = (coefficients[0::3] * current_beta**2
+ coefficients[1::3] * current_beta
+ coefficients[2::3])
这适用于任何长度的系数。这里用于切片的语法基本上从点开始,然后取每第 3 个元素。