是否可以对包含1D和2D numpy数组的Python代码进行矢量化?

时间:2014-11-28 16:45:10

标签: python arrays numpy vectorization

actualrgn是3145728个元素的1D numpy.ndarrayactualrgnexpand是尺寸为12 x 3145728的2D numpy.ndarray

for j in range(len(actualrgn)):
    for i in reversed(range(12)):
        if actualrgn[j] >= 2**i:
            actualrgnexpand[i][j] = 1
            actualrgn[j] -= 2**i

是否可以对上述内容进行矢量化,以便在actualrgn的元素上丢失外部循环?我尝试使用numpy.vectorize,但似乎很难将标量和向量的函数(使用数学等价物)转换为向量和矩阵的函数。我也试过找到'内置'ufunc来简化上述内容但没有成功。

1 个答案:

答案 0 :(得分:2)

矢量化' if'声明,是使用布尔索引掩码。

for i in reversed(range(12)):
    I = actualrgn >= 2**i
    actualrgnexpand[i,I] = 1
    actualrgn[I] -= 2**i

actualrgn[I]是应修改的数字子集。这些作业的右侧必须是正确的尺寸。在这种情况下,标量符合所有条件。