python - 将数组提升为另一个数组的幂 - 即扩展数组的维度

标签 python arrays performance numpy matrix

是否可以使用 numpy 将一个数组求为另一个数组的幂,从而产生比输入维度更大的结果 - 即不仅仅是简单的元素明智求幂。

作为一个简单的例子,我希望计算以下内容。下面是“普通”形式 - 实际上,这是通过大型 x 数组上的循环来实现的,因此速度很慢。

x = np.arange(4)
t = np.random.rand(3,3)

y = np.empty_like(x)
y[0] = np.sum(x[0]**t)
y[1] = np.sum(x[1]**t)
y[2] = np.sum(x[2]**t)
y[3] = np.sum(x[3]**t)

我想要一个矢量化解决方案来代替每次执行y[i]。但是,由于 x 的形状为 [4] 且 y 的形状为 [3,3],因此当我尝试计算 x**t 时,我出现错误。

有没有快速优化的解决方案?

最佳答案

直接的矢量化方式是使用广播 -

y = (x[:,None,None]**t).sum((1,2)).astype(x.dtype)

或者使用内置的np.power.outer -

y = np.power.outer(x,t).sum((1,2)).astype(x.dtype)
<小时/>

对于大型数组,通过 numexpr 模块利用多核 -

import numexpr as ne

y = ne.evaluate('sum(x3D**t1D,1)',{'x3D':x[:,None],'t1D':t.ravel()}).astype(x.dtype)

关于python - 将数组提升为另一个数组的幂 - 即扩展数组的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59057824/

相关文章:

python - 如何使用 unicode_literals 在 python 2 和 3 中获得兼容的 type() 行为?

Python C 扩展缺少函数

performance - 什么是完成大型重复性任务的最佳方法?

python - Django/python 和 Apache Solr : pysolr or solrpy?

python - python脚本中的os.system命令导致错误

javascript - ng-repeat 数组按数据源的属性索引排序

Javascript 将数组插入数组,但改为连接

ios - Swift 2.2 - NSArray 元素无法匹配 TableViewController 中单元格的 Swift 数组元素类型

javascript - 正则表达式与 while 循环

c++ - 高效地创建大量需要访问 "global"对象的小型 C++ 对象