ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

向量化 Python 函数

2021-11-26 15:00:45  阅读:162  来源: 互联网

标签:old 函数 Python flattened func 量化 100 array


我有一个名为的旧函数 old_func ,它将两个位置参数作为输入, x 并且 y . 函数的输入是这样写的,使用元组作为输入:

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>def </strong></span> <span style="color:#880000"><strong>old_func </strong></span>(位置) :

    x, y = 位置
    <span style="color:#333333"><strong>返回</strong></span>x ** <span style="color:#880000">2</span> + y ** <span style="color:#880000">2</span></span></span>

我现在想要一种在值网格上调用函数的快速简便的方法:

<span style="color:#444444"><span style="background-color:#f6f6f6">xx = numpy.linspace(0, 1, 100)
yy = numpy.linspace(0, 1, 100)
X, Y = numpy.meshgrid(xx, yy)

array_positions = (X,Y)
old_fun(array_positions)</span></span>

目的是x 对函数中的每个操作 都对所有的 X 和 相同的 完成 y 。我尝试使用矢量化函数, 但这不起作用。我不想更改函数以接受 NumPy 数组,因为这将花费太长时间。

下面的代码可以解决问题,并为您省去创建 array_positions .

首先,使用 来展平 并 变成形状为 的 NumPy 数组 。 ravel XY(10000,)

<span style="color:#444444"><span style="background-color:#f6f6f6">X_flattened = X.ravel()
 Y_flattened = Y.ravel()</span></span>

然后,使用 来实现自定义函数,沿着这些扁平数组的长度迭代。 

<span style="color:#444444"><span style="background-color:#f6f6f6">float_array = np.apply_along_axis(old_func, <span style="color:#880000">0</span> , (X_flattened, Y_flattened))</span></span>

最后,将输出数组重塑为所需的 形状 (100, 100) 。

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>np </strong></span><span style="color:#880000">.reshape</span> (float_array, ( <span style="color:#880000">100</span> , <span style="color:#880000">100</span> ))</span></span>

标签:old,函数,Python,flattened,func,量化,100,array
来源: https://blog.csdn.net/Aai1624/article/details/121560107

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有