如何使用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来实现。 但是我认为这样做效率不高,我不知道是否有更好的实现方法。
答案 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之类的优化来执行所要求的运算(如乘法)。
有关使用None
或np.newaxis
广播和扩展数组维的更多信息,请参见: