3d 数组的乘法和切片
Multiplication for a 3d array and slicing
我有一个大小为 5 x 98 x 3 的矩阵。我想找到每个 98 x 3 块的转置并将其与自身相乘以找到标准差。
因此,我希望我的最终答案大小为 5 x 3 x 3。
使用 numpy 执行此操作的有效方法是什么。
我目前可以使用以下代码执行此操作:
MU.shape[0] = 5
rows = 98
SIGMA = []
for i in np.arange(MU.shape[0]):
SIGMA.append([])
SIGMA[i] = np.matmul(np.transpose(diff[i]),diff[i])
SIGMA = np.array(SIGMA)
SIGMA = SIGMA/rows
此处 diff 的大小为 5 x 98 x 3。
使用np.einsum
求和减少最后一个轴相互偏离-
SIGMA = np.einsum('ijk,ijl->ikl',diff,diff)
SIGMA = SIGMA/rows
使用 optimize
标志和 np.einsum
中的 True
值来利用 BLAS
。
我们也可以使用np.matmul
得到那些sum-reductions
-
SIGMA = np.matmul(diff.swapaxes(1,2),diff)
你可以使用这个:
my_result = arr1.swapaxes(1,2) @ arr1
正在测试:
import numpy as np
NINETY_EIGHT = 10
arr1 = np.arange(5*NINETY_EIGHT*3).reshape(5,NINETY_EIGHT,3)
my_result = arr1.swapaxes(1,2) @ arr1
print (my_result.shape)
输出:
(5, 3, 3)
我有一个大小为 5 x 98 x 3 的矩阵。我想找到每个 98 x 3 块的转置并将其与自身相乘以找到标准差。 因此,我希望我的最终答案大小为 5 x 3 x 3。 使用 numpy 执行此操作的有效方法是什么。
我目前可以使用以下代码执行此操作:
MU.shape[0] = 5
rows = 98
SIGMA = []
for i in np.arange(MU.shape[0]):
SIGMA.append([])
SIGMA[i] = np.matmul(np.transpose(diff[i]),diff[i])
SIGMA = np.array(SIGMA)
SIGMA = SIGMA/rows
此处 diff 的大小为 5 x 98 x 3。
使用np.einsum
求和减少最后一个轴相互偏离-
SIGMA = np.einsum('ijk,ijl->ikl',diff,diff)
SIGMA = SIGMA/rows
使用 optimize
标志和 np.einsum
中的 True
值来利用 BLAS
。
我们也可以使用np.matmul
得到那些sum-reductions
-
SIGMA = np.matmul(diff.swapaxes(1,2),diff)
你可以使用这个:
my_result = arr1.swapaxes(1,2) @ arr1
正在测试:
import numpy as np
NINETY_EIGHT = 10
arr1 = np.arange(5*NINETY_EIGHT*3).reshape(5,NINETY_EIGHT,3)
my_result = arr1.swapaxes(1,2) @ arr1
print (my_result.shape)
输出:
(5, 3, 3)