如何使用mkl实现numpy广播机制?

时间:2019-01-04 14:39:09

标签: intel-mkl

如何使用mkl实现numpy广播机制?

我很困惑,如何使用mkl在numpy中有效地实现广播机制(元素明智的运算符“ +”,“-”,“ *”)?

例如 二维阵列子1-D阵列

[[1,2,3],              [[0,0,0],
 [4,5,6],  - [1,2,3] =  [3,3,3],
 [7,8,9]]               [6,6,6]] 

第二个运算(可以理解为矩阵乘以对角矩阵) 二维数组乘一维数组(元素明智乘)

[[1,2,3],               [[1,4,9],
 [4,5,6],  *  [1,2,3] =  [4,10,18],
 [7,8,9]]                [7,16,27]] 

我试图用for循环+ cblas_dscal / vdSub来实现。 但是我认为这样做效率不高,我不知道是否有更好的实现方法。

1 个答案:

答案 0 :(得分:0)

您可以使用arr2[None, :]将第二个数组广播到二维。这将产生以下代码:

arr1 = np.array([[1,2,3],
                 [4,5,6],
                 [7,8,9]])
arr2 = np.array([1,2,3])

print(arr1 - arr2[None, :])
# Out: [[0 0 0]
#       [3 3 3]
#       [6 6 6]]
print(arr1 * arr2[None, :])
# Out: [[ 1,  4,  9],
#       [ 4, 10, 18],
#       [ 7, 16, 27]]

如果您像这样广播数组,numpy将使用mkl之类的优化来执行所要求的运算(如乘法)。
有关使用Nonenp.newaxis广播和扩展数组维的更多信息,请参见: