python - Numpy 对 2D 数组进行操作以生成 3D 数组

标签 python numpy

我已经生成了一个 (x, y) 值的 numpy 数组作为 N x N 网格。

grid = np.meshgrid(np.linspace(0, 1, 50), np.linspace(0, 1, 50))[0]
grid.shape  // (50, 50, 1)

我有一个函数,它接受两个参数并返回 3 个值。 即 (x, y) -> (a, b, c)

如何在 2d numpy 数组上应用该函数以获得 3d numpy 数组?

最佳答案

如果您的函数确实需要两个参数,您可能不想将 2d 映射到 3d,而是将 2xMxN 映射到 3xMxN。为此,将您的第一行更改为类似

gridx, gridy = np.meshgrid(np.linspace(0, 1, 50), np.linspace(0, 1, 50))

甚至使用更经济的ix_,其优点是不交换轴

gridy, gridx = np.ix_(np.linspace(0, 1, 50), np.linspace(0, 1, 50))

如果您的函数 f 不处理数组参数,那么正如@Jacques Gaudin 指出的那样,np.vectorize 可能就是您想要的。请注意,vectorize 主要是一个便利函数,它不会使事情变得更快。它可以做一些有用的事情,比如广播,这就是为什么使用 ix_ 实际上有效

f_wrapped = np.vectorize(f)
result = f_wrapped(gridy, gridx)

请注意,您的情况下的 result 是 50 x 50 数组的 3 元组,即按输出分组。如果您想链接向量化函数,这很方便。如果您希望所有内容都在一个大数组中,只需将 result 转换为 array 并可选择使用 transpose 重新排列轴,例如

 triplets_last = np.array(result).transpose((1, 2, 0))

关于python - Numpy 对 2D 数组进行操作以生成 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969120/

相关文章:

arrays - numpy 乘以不同形状的数组

python - Django教程: TypeError at/polls/3/vote/reverse() takes no keyword arguments

python - 获取触发事件的小部件?

python - 一旦音量低于python-sounddevice的阈值,停止记录

python - 如何 reshape ()numpy中奇数行和偶数行的总和

python - 如何使用 matplotlib 绘制与 y = x 线平行的线?

python - 从文件加载数据集,与 sklearn/numpy 一起使用,包括标签

python - 我可以安全地使用 np.random.binomial 和概率列表

python - 使用 Python 3 列表卡住

python - 谷歌云存储出现错误 pwd.getpwuid