我有两个矩阵A,B,我想创建一个三维数组C,这样

C[k,i,j]=A[k,j]*B[k,i]

我曾想过使用np.einsum,但找不到方法,我不确定它在这里是否有用.

一个天真的循环是可能的,但听起来相当低效.

UPDATE

C=np.einsum('kj,ki->kij',A,B)

works,非常优雅,这是在@Warren Weckesser的答案之上

推荐答案

基本broadcasting将起作用,例如.

In [55]: A  # shape is (2, 3)
Out[55]: 
array([[4, 9, 5],
       [2, 0, 9]])

In [56]: B  # shape is (2, 4)
Out[56]: 
array([[8, 8, 0, 3],
       [6, 8, 3, 8]])

A[:,None,:]具有形状(2,1,3),B[:,:,None]具有形状(2,4,1).通过广播,这些表达式的乘积将具有形状(2、4、3).


In [57]: C = A[:,None,:] * B[:,:,None]

In [58]: C
Out[58]: 
array([[[32, 72, 40],
        [32, 72, 40],
        [ 0,  0,  0],
        [12, 27, 15]],

       [[12,  0, 54],
        [16,  0, 72],
        [ 6,  0, 27],
        [16,  0, 72]]])

In [59]: C.shape
Out[59]: (2, 4, 3)

Python相关问答推荐

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

使用Openpyxl从Excel中的折线图更改图表样式

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

当条件满足时停止ODE集成?

pandas fill和bfill基于另一列中的条件

将CSS链接到HTML文件的问题

如何使用Azure Function将xlsb转换为xlsx?

为什么dict. items()可以快速查找?

某些值的数值幂和**之间的差异

使用美汤对维基百科表格进行网络刮擦未返回任何内容

Pandas:根据相邻行之间的差异过滤数据帧

生产者/消费者-Queue.get by list

Django查询集-排除True值

GEKKO中若干参数的线性插值动态优化

简化通用属性的创建

通过外键Django创建从一个字段到其他字段的 Select 列表

设计添加和搜索词的数据 struct :Leetcode211

获取每行NumPy最大出现次数的所有值

当我的自定义对象用作Pydtic模型中的默认参数时,它不会被深度复制

无法在没有echo的情况下判断macOS上Python中按下的键