python - Numpy函数获取添加数组的形状

标签 python arrays numpy array-broadcasting

tl;dr:我如何预测 numpy 跨多个数组广播返回的形状,而无需实际添加数组?

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

def rhoIdeal(pressure,temperature):
    rho = np.zeros_like(pressure + temperature)
    rho += pressure / (287.05 * temperature)
    return rho

这里没有必要,但在更复杂的函数中,用正确的形状初始化数组非常有用。如果压力和温度具有相同的形状,则 rho 也具有该形状。如果压力的形状为 (n,) 并且温度的形状为 (m,),我可以调用

rhoIdeal(pressure[:,np.newaxis], temperature[np.newaxis,:])

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

我的问题是:是否有内置函数可以返回与多个输入兼容的形状?行为类似的东西

def returnShape(list_of_arrays):
    return np.zeros_like(sum(list_of_arrays)).shape

实际上不必对数组求和?如果没有内置函数,一个好的实现应该是什么样的?

最佳答案

你可以使用 np.broadcast .此函数返回一个对象,该对象封装了将两个或多个数组一起广播的结果。不执行任何实际操作(例如加法)——该对象仅具有一些与通过其他操作生成的数组相同的属性(形状、ndim 等)。

例如:

x = np.array([1,2,3])  # shape (3,)
y = x.reshape(3,1)     # shape (3, 1)
z = np.ones((5,1,1))   # shape (5, 1, 1)

然后您可以通过检查 shape 属性来检查通过广播 xyz 返回的数组的形状:

>>> np.broadcast(x, y, z).shape
(5, 3, 3)

这意味着您可以按如下方式简单地实现您的功能:

def returnShape(*args):
    return np.broadcast(*args).shape

关于python - Numpy函数获取添加数组的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879378/

相关文章:

Python图像旋转角度计算

python - Numpy 3D 数组排列和 reshape

python - 用户注册 Django 后如何运行函数

php - 如何多次合并同一个数组?

javascript - 相当于 SQL 完全连接与 Javascript 对象数组

javascript - 奇怪的行为 "for in"语句 (NodeJS)

python - 如何修复我的感知器来识别数字?

python - 在 numpy 中计算高于阈值的数组值的最快方法

python - 如何在本地运行 Cloud Run 服务?

python - 计算数组中的元音