小编Jar*_*olt的帖子

Numpy函数可以获得添加数组的形状

tl; dr:我如何预测numpy广播在几个数组中返回的形状而不必实际添加数组?

我有很多脚本使用numpy(Python)广播规则,因此基本上1D输入会产生多维输出.对于一个基本的例子,理想气体定律(压力= rho*R_d*温度)可能看起来像

def rhoIdeal(pressure,temperature):
    rho = np.zeros_like(pressure + temperature)
    rho += pressure / (287.05 * temperature)
    return rho
Run Code Online (Sandbox Code Playgroud)

这里没有必要,但在更复杂的函数中,初始化具有正确形状的数组非常有用.如果压力和温度具有相同的形状,那么rho也具有这种形状.如果压力有形状(n,),温度有形状(m,),我可以打电话

rhoIdeal(pressure[:,np.newaxis], temperature[np.newaxis,:])
Run Code Online (Sandbox Code Playgroud)

获得rho形状(n,m).这使我可以制作具有多个温度值的绘图而无需循环rhoIdeal,同时仍然允许脚本接受相同形状的数组并逐个元素地计算结果.

我的问题是:是否有内置函数返回与多个输入兼容的形状?表现得像的东西

def returnShape(list_of_arrays):
    return np.zeros_like(sum(list_of_arrays)).shape
Run Code Online (Sandbox Code Playgroud)

没有实际需要对数组求和?如果没有内置函数,那么好的实现会是什么样的?

python arrays numpy numpy-broadcasting

5
推荐指数
1
解决办法
392
查看次数

布伦特算法的矢量化版本(求根)

我正在研究海水状态方程的 Python 版本 ( http://www.teos-10.org/ )。该库依赖于反演方程,例如如果您知道和但通常有和,p = f(t,d)则可以直接计算。这只是一个求根问题,该库提供了使用牛顿法、二分法或布伦特法的选项。(特别是对于布伦特方法,请参阅 wiki https://en.wikipedia.org/wiki/Brent%27s_method。)f(t,d)tdtp

t但是,该库会找到和的单个值的根p。我希望我的版本可以用于绘制和探索状态方程,因此我希望允许t和的向量(numpy 数组)值p。向量化牛顿法和二分法相当简单,但布伦特法有很多我无法理解的条件。

关于如何矢量化此方法有什么建议吗?t更重要的是,矢量化实际上会比循环和数组中的值更快吗p

python numpy mathematical-optimization vectorization

5
推荐指数
1
解决办法
1689
查看次数