当前位置: 首页 > 面试题库 >

快速外部张量乘积

苏运良
2023-03-14
问题内容

我有两个numpy数组:

x of shape ((d1,...,d_m)) 
y of shape ((e_1,...e_n))

我想形成外部张量积,即numpy数组

z of shape ((d1,...,d_m,e_1,...,e_n))

这样

z[i_1,...,i_n,i_{n+1}...,i_{m+n}] == x[i_1,...i_m]*y[i_{m+1},...,i_{m+n}]

我必须多次执行上述外部乘法,所以我想尽可能地加快速度。


问题答案:

另一种方法outer是显式扩展尺寸。对于一维数组,这将是

x[:,None]*y   # y[None,:] is automatic.

对于10x10的数组,并推广维度扩展,我得到了相同的时间

In [74]: timeit x[[slice(None)]*x.ndim + [None]*y.ndim] * y
10000 loops, best of 3: 53.6 µs per loop

In [75]: timeit np.multiply.outer(x,y)
10000 loops, best of 3: 52.6 µs per loop

这样outer确实可以节省一些编码,但是基本的广播乘法是相同的。



 类似资料:
  • 问题内容: 在应用程序的核心(用Python编写并使用NumPy编写)中,我需要旋转一个四阶张量。实际上,我需要多次旋转许多张量,这是我的瓶颈。我涉及八个嵌套循环的幼稚实现(如下)似乎很慢,但是我看不到利用NumPy矩阵运算并希望加快处理速度的方法。我有一种应该使用的感觉,但是我不知道如何使用。 数学上,旋转张量T’的元素由下式给出:T’ijkl = ∑ g ia g jb g kc g ld T

  • 在课堂上,我必须为稀疏矩阵编写自己的线性方程求解器。我可以自由地使用任何类型的数据结构为稀疏矩阵,我必须实现几个解决方案,包括共轭梯度。 谢了!

  • 问题内容: 我是一名希望学习Swift的设计师,并且是新手。 我没有任何经验。 我正在尝试在Xcode的游乐场中使用基本代码创建小费计算器。 这是我到目前为止所拥有的。 我得到错误: 二进制运算符’*’不能应用于’Int’和’Double’类型的操作数 这是否意味着我不能乘双打? 我是否缺少任何变量的基本概念,并且在这里加倍? 问题答案: 您只能使用相同数据类型的多个。 如果你这样声明.. 它将被

  • 问题内容: 我有一个矩阵与形状和三维张量与形状。我想与中的每个矩阵相乘,得到3d张量。 给出期望的结果。对于这个问题是否有 更好的 解决方案(即摆脱)?这必须是相当常见的操作,因此我认为其他人已经找到了不同的方法,例如使用(我尝试过但未能获得期望的结果)。意见/观点将不胜感激! 问题答案:

  • 我们这里以项目 flask-todo-app 为例,介绍如何将其部署到生产环境,主要有以下几个步骤: 创建项目的运行环境 使用 Gunicorn 启动 flask 程序 使用 supervisor 管理服务器进程 使用 Nginx 做反向代理 创建项目的运行环境 创建 Python 虚拟环境,以便隔离不同的项目 安装项目依赖包 $ pip install virtualenvwrapper $ s

  • 问题内容: 我正在使用以下代码将单个图像上传到服务器: 如何通过编辑此代码在单个参数中上传多张图片? 问题答案: Swift 3 只需在图像上传参数中使用“ []”即可使其成为图像数组。