Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 三维阵列的乘法和切片_Python_Numpy_Matrix Multiplication - Fatal编程技术网

Python 三维阵列的乘法和切片

Python 三维阵列的乘法和切片,python,numpy,matrix-multiplication,Python,Numpy,Matrix Multiplication,我有一个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.t

我有一个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

此处的差异大小为5 x 98 x 3。

使用
np.einsum
求和,以减少最后一个轴彼此之间的偏移-

SIGMA = np.einsum('ijk,ijl->ikl',diff,diff)
SIGMA = SIGMA/rows
np.einsum
中使用
optimize
标志和
True
值来利用
BLAS

我们还可以使用
np.matmul
来获得那些
总和缩减
-

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)
输出:

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)

差异只是数据集和平均值之间的差异。穆是中庸的,谢谢。工作得很有魅力。尽管如此,我还是需要详细阅读einsum函数。@Divakar:+1。很高兴被介绍到
np.einsum()
。必须仔细阅读,才能理解“爱因斯坦总和”在这里的适用性这里没有乘法运算。我想解释一下你提到的矩阵乘法的要求。
@
运算符执行矩阵乘法。看看你接受的另一个答案,我怀疑我可能误解了你的问题。我以为你的要求只是执行乘法部分。您是否还希望代码计算差异、平均值等。?还是已经计算并存储在形状
(5,98,3)
arr1
中?我已经计算了差异。我只是在乘法部分有问题。另外,我也不知道@operator执行交互应用。谢谢你。我会尽量尝试你的方法well@AhmedJunaidKhalid
@
与matmul相同,特定于Python 3.x。更多信息-