【发布时间】:2017-02-19 09:03:05
【问题描述】:
>>> c= array([[[1, 2],
[3, 4]],
[[2, 1],
[4, 3]],
[[3, 2],
[1, 4]]])
>>> x
array([[0, 1, 2],
[3, 4, 5]])
返回一个矩阵,使得每一列都是 c 中每个矩阵的乘积,乘以常规矩阵乘法中 x 的每个对应列。我正在尝试找出一种对其进行矢量化的方法,或者至少不使用 for 循环来解决它。
array([[6, 6, 16]
12, 16, 22]])
为了进一步扩展这个操作,假设我有一个矩阵数组,比如说
>>> c
array([[[1, 2],
[3, 4]],
[[2, 1],
[4, 3]],
[[3, 2],
[1, 4]]])
>>> x
array([[[1, 2, 3],
[1, 2, 3]],
[[1, 0, 2],
[1, 0, 2]],
[[2, 3, 1],
[0, 1, 0]]])
def fun(c,x):
for i in range(len(x)):
np.einsum('ijk,ki->ji',c,x[i])
##something
所以基本上,我想让 x 中的每个矩阵与所有 c 相乘。在不引入这个for循环的情况下返回类似于c的结构
我这样做的原因是因为我遇到了一个问题来解决一个问题,试图向量化
Xc(运算遵循法线矩阵列向量乘法),c为3D数组;就像上面的 c - 一个列向量,每个元素都是一个矩阵(在 numpy 中它的形式在上面)。 X 是矩阵,每个元素都是一维数组。 Xc 的输出应该是一维数组。
【问题讨论】:
-
那么,预期的输出也是3D?
-
@Divakar 是的,对于 fun(c,x) 它应该是 3D 数组;
标签: python numpy vectorization