python – 在多维numpy数组中快速迭代向量

python – 在多维numpy数组中快速迭代向量,第1张

概述我正在编写一些 python numpy cython代码,并试图找到在数组上进行以下迭代的最优雅和有效的方法: 假设我有一个函数f(x,y),它采用形状(3,)的向量x和形状(10,)的向量y,并返回形状(10,)的向量.现在我有两个数组X和Y形状sx(3,)和sy(10,),其中sx和sy是两个可以一起广播的形状(即sx == sy,或者当轴不同时,一个两者的长度为1,在这种情况下将重复).我 我正在编写一些 python numpy cython代码,并试图找到在数组上进行以下迭代的最优雅和有效的方法:

假设我有一个函数f(x,y),它采用形状(3,)的向量x和形状(10,)的向量y,并返回形状(10,)的向量.现在我有两个数组X和Y形状sx(3,)和sy(10,),其中sx和sy是两个可以一起广播的形状(即sx == sy,或者当轴不同时,一个两者的长度为1,在这种情况下将重复).我想生成一个形状为zs(10,)的数组Z,其中zs是带有sy的sx广播的形状. Z中的每个10维向量等于X和Y中相应位置处的向量x和y的f(x,y).

我查看了np.nditer,虽然它与cython一起运行很好(参见链接页面的底部),但它似乎不允许迭代来自多维数组的向量而不是元素.我也看了index grids,但问题是当索引的数量等于数组的维数时,cython索引只是快速的,并且存储为cython整数而不是python元组.

任何帮助是极大的赞赏!

解决方法 您正在描述Numpy所谓的广义通用功能或gufunc.顾名思义,它是ufuncs的扩展.您可能希望从阅读这两个页面开始:

> Writing your own ufunc
> Building a ufunc from scratch

第二个例子使用Cython并在gufunc上有一些材料.要完全走下gufunc之路,您需要阅读numpy C api文档中的相应部分:

> Generalized Universal Function API

我不知道在Cython中编码gufuncs的任何例子,尽管遵循上面的例子并不难.如果你想看看用C编码的gufunc,你可以看看np.linalg here的源代码,虽然这可能是一个令人生畏的经历.前段时间我厌倦了我的本地Python用户组,给出了关于使用C扩展numpy的讨论,主要是关于在C中编写gufunc,该演讲的幻灯片和提供新gufunc的示例python模块可以在here找到.

总结

以上是内存溢出为你收集整理的python – 在多维numpy数组中快速迭代向量全部内容,希望文章能够帮你解决python – 在多维numpy数组中快速迭代向量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存