python – Numpy沿轴应用并获取行索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Numpy沿轴应用并获取行索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1511字,纯文字阅读大概需要3分钟。
内容图文
![python – Numpy沿轴应用并获取行索引](/upload/InfoBanner/zyjiaocheng/767/3b1e6eed9af041ceaad3971d0cb92df4.jpg)
我有一个2D数组(它实际上非常大,另一个数组的视图):
x = np.array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5]]
)
我有一个处理数组的每一行的函数:
def some_func(a):
"""
Some function that does something funky with a row of numbers
"""
return [a[2], a[0]] # This is not so funky
np.apply_along_axis(some_func, 1, x)
我正在寻找的是调用np.apply_along_axis函数的一些方法,以便我可以访问行索引(对于正在处理的行),然后能够使用此函数处理每一行:
def some_func(a, idx):
"""
I plan to use the index for some logic on which columns to
return. This is only an example
"""
return [idx, a[2], a[0]] # This is not so funky
解决方法:
对于轴= 1的2d数组,apply_along_axis与数组行的迭代相同
In [149]: np.apply_along_axis(some_func, 1, x)
Out[149]:
array([[2, 0],
[3, 1],
[4, 2],
[5, 3]])
In [151]: np.array([some_func(i) for i in x])
Out[151]:
array([[2, 0],
[3, 1],
[4, 2],
[5, 3]])
对于axis = 0,我们可以迭代x.T.当数组为3d时,apply_along_axis更有用,我们想要迭代除一个之外的所有维度.然后它节省了一些单调乏味.但它不是速度解决方案.
使用修改后的函数,我们可以使用标准枚举来获取行和索引:
In [153]: np.array([some_func(v,i) for i,v in enumerate(x)])
Out[153]:
array([[0, 2, 0],
[1, 3, 1],
[2, 4, 2],
[3, 5, 3]])
或者使用简单的范围迭代:
In [157]: np.array([some_func(x[i],i) for i in range(x.shape[0])])
Out[157]:
array([[0, 2, 0],
[1, 3, 1],
[2, 4, 2],
[3, 5, 3]])
有各种工具可以获得更高维度的索引,例如ndenumerate和ndindex.
快速解决方案 – 一次处理所有行:
In [158]: np.column_stack((np.arange(4), x[:,2], x[:,0]))
Out[158]:
array([[0, 2, 0],
[1, 3, 1],
[2, 4, 2],
[3, 5, 3]])
内容总结
以上是互联网集市为您收集整理的python – Numpy沿轴应用并获取行索引全部内容,希望文章能够帮你解决python – Numpy沿轴应用并获取行索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。