我有一个形状为(5,4,4)的ndarray,它是一个由5个矩阵4x4组成的集合.我想将ndarray乘以形状(3,5)的矩阵,并且我想得到形状(3,4,4)的ndarray,其中结果中的每个矩阵4x4是54×4矩阵与来自矩阵(3,5)的行的系数的线性组合.

我有以下非常基本的代码:

import numpy as np


np.random.seed(10)
X = np.random.rand(5,4,4)
A = np.random.rand(3,5)

print( A*X )

如我所料,这会生成错误消息"操作数无法与形状(3,5)(5,4,4)一起广播"

我读了一些关于广播的文章,但我似乎找不到一种方法来编写可以被Numpy矢量化的操作.

有谁有过类似的经历吗?

推荐答案

对于这些类型的操作,np.einsum是完美的.以下是您想要的吗?

B = np.einsum('ij,jkl->ikl', A, X)
print(B.shape) # (3,4,4)

换句话说,字符串ij,jkl->ikl的意思是:

  • A的指数(维度)分别为ij
  • X的指数分别为jkl
  • ->ikl乘以A[i,j]*X[j,k,l],加法超过j

Python相关问答推荐

Mistral模型为不同的输入文本生成相同的嵌入

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

Python列表不会在条件while循环中正确随机化'

在极中解析带有数字和SI前缀的字符串

python—telegraph—bot send_voice发送空文件

基于多个数组的多个条件将值添加到numpy数组

并行编程:同步进程

如何在Python请求中组合多个适配器?

将一个双框爆炸到另一个双框的范围内

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

需要帮助使用Python中的Google的People API更新联系人的多个字段'

如何重新组织我的Pandas DataFrame,使列名成为列值?

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

有没有办法让Re.Sub报告它所做的每一次替换?

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

如何根据一定条件生成段id

比较两个有条件的数据帧并删除所有不合格的数据帧

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?