Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何将3d数组中的一维数组乘以带有numpy的2d矩阵_Python_Arrays_Numpy - Fatal编程技术网

Python 如何将3d数组中的一维数组乘以带有numpy的2d矩阵

Python 如何将3d数组中的一维数组乘以带有numpy的2d矩阵,python,arrays,numpy,Python,Arrays,Numpy,我想要下面的计算。这个例子中使用的值在实际情况中是可变的 A = [[1,1,1],[2,1,1]] B =[[[1,2,3],[2,2,2]],[[1,1,2],[1,1,1]]] result = apply_some_function(A,B) >> result = [[[6,7],[6,8]], [[4,5],[3,4]]] 他们的任何有效方法都可以用numpy满足上述计算。 事实上,我不清楚如何将numpy应用于多维阵列。所以,若你们知

我想要下面的计算。这个例子中使用的值在实际情况中是可变的

 A = [[1,1,1],[2,1,1]]
 B =[[[1,2,3],[2,2,2]],[[1,1,2],[1,1,1]]]
 result = apply_some_function(A,B)
 >> result = [[[6,7],[6,8]],
             [[4,5],[3,4]]]
他们的任何有效方法都可以用numpy满足上述计算。 事实上,我不清楚如何将numpy应用于多维阵列。所以,若你们知道有助于理解操纵多维数组规则的文档,我很高兴你们能告诉我。

你们可以使用或


这两个函数都计算乘积之和。因此,它们是 矩阵乘法的推广

注意阵列的形状通常是有帮助的。如果我们制作
A
B
result
NumPy数组:

A = np.array([[1,1,1],[2,1,1]])
B = np.array([[[1,2,3],[2,2,2]],[[1,1,2],[1,1,1]]])
result = np.array([[[6,7],[6,8]], [[4,5],[3,4]]])
然后

请注意,
A
B
中的长度轴3在
result
中消失。这表明,(产品的)总和在
A
B
的最后一个轴上

np.tensordot(B,A,(-1,-1))
中的
(-1,-1)
告诉
np.tensordot
A
B
的最后几个轴上求和

类似地,如果
np.einsum('ij,klj->kli',A,B)
中的
'ij,klj->kli'
表示如果
A
有索引
i
j
,如果
B
有索引
k
l
j
,那么结果应该有索引
k
l
。注意
j
索引消失了。
j
索引是
A
B
中的最后一个索引。因此,
'ij,klj->kli'
告诉
np.einsum
A
B
的最后一个索引求和

剩下要做的唯一一件事就是找出
k
l
i
索引的正确顺序。由于
result
中的每个轴都具有相同的长度,因此
result
的形状不提供任何线索。我通过反复试验找到了正确的顺序。

您可以使用或


这两个函数都计算乘积之和。因此,它们是 矩阵乘法的推广

注意阵列的形状通常是有帮助的。如果我们制作
A
B
result
NumPy数组:

A = np.array([[1,1,1],[2,1,1]])
B = np.array([[[1,2,3],[2,2,2]],[[1,1,2],[1,1,1]]])
result = np.array([[[6,7],[6,8]], [[4,5],[3,4]]])
然后

请注意,
A
B
中的长度轴3在
result
中消失。这表明,(产品的)总和在
A
B
的最后一个轴上

np.tensordot(B,A,(-1,-1))
中的
(-1,-1)
告诉
np.tensordot
A
B
的最后几个轴上求和

类似地,如果
np.einsum('ij,klj->kli',A,B)
中的
'ij,klj->kli'
表示如果
A
有索引
i
j
,如果
B
有索引
k
l
j
,那么结果应该有索引
k
l
。注意
j
索引消失了。
j
索引是
A
B
中的最后一个索引。因此,
'ij,klj->kli'
告诉
np.einsum
A
B
的最后一个索引求和


剩下要做的唯一一件事就是找出
k
l
i
索引的正确顺序。由于
result
中的每个轴都具有相同的长度,因此
result
的形状不提供任何线索。我通过反复试验找到了正确的顺序。

谢谢您的回答。我会比预期更快地解决我的问题。我知道我们可以在使用太多复杂矩阵生成时使用np.einsum。谢谢,让我知道非常有用的说明。我真的很感激。谢谢你的回答。我会比我预期的更快地解决我的问题。我知道我们可以在使用太多复杂矩阵生成时使用np.einsum。谢谢,让我知道非常有用的指导。我真的很感激。
In [6]: A.shape
Out[6]: (2, 3)

In [7]: B.shape
Out[7]: (2, 2, 3)

In [9]: result.shape
Out[9]: (2, 2, 2)