需求:高维(至少3维以上)的两个数组,进行线性代数中的矩阵相乘!下面的规律numpy和cupy都适用。
两个数组尺寸要求:
- "2维以上"的尺寸必须完全对应相等;
- "2维"具有实际意义的单位,只要满足矩阵相乘的尺寸规律即可。
例子:
import numpy as np
# 前两个高维4和3必须对应完全相等!后面两个只需满足矩阵相乘要求即可。
a = np.zeros( (4,3,4,2) ) + 1
b = np.zeros( (4,3,2,4) ) + 2
w = np.matmul(a,b)
print( w.shape )
# 结果:
(4, 3, 4, 4)
结果的说明:我们已经知道,高维数组的单位其实就是一个个二维矩阵;上面例子的"高维数组相乘",其实就是"两个矩阵彼此之间二维矩阵单位的相乘"而已!高维仅代表这样的单位有很多,整体做了很多对应位置的单位相乘罢了(直接用高维数组相乘,比用循环对应位置一个一个循环乘要快太多!!)。
因此:再高纬度的矩阵,都能直接进行快速的矩阵相乘,这为"矢量化编程"创造了条件。
网友评论