gpt4 book ai didi

python:从网格节点在网格上构建迭代器

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:39 25 4
gpt4 key购买 nike

我正在使用 python 3我想从 3 个维度的节点列表开始并构建一个网格。我想避免构造

import numpy as np
l = np.zeros(len(xv)*len(yv)*len(zv))
for (i,x) in zip(range(len(xv)),xv):
for (j,y) in zip(range(len(yv)),yv):
for (k,z) in zip(range(len(zv)),zv):
l[i,j,k] = func(x,y,z)

我正在寻找上述行的更紧凑版本。像 zip 这样的迭代器,但它会迭代网格中所有可能的元组

最佳答案

您可以使用类似np.meshgrid 的东西来构建您的网格。假设 func 被正确矢量化,那应该足以构造 l

X, Y, Z = np.meshgrid(xv, yv, zv)
l = func(X, Y, Z)

如果 func 矢量化,您可以使用 np.vectorize 构建矢量化版本.

另请注意,通过明智地使用 np.newaxis,您甚至可以在不使用 np.meshgrid 的情况下逃脱:

>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> y
array([0, 1, 2])
>>> z
array([0, 1])
>>> def func(x, y, z):
... return x + y + z
...
>>> vfunc = np.vectorize(func)
>>> vfunc(x[:, np.newaxis, np.newaxis], y[np.newaxis, :, np.newaxis], z[np.newaxis, np.newaxis, :])
array([[[ 0, 1],
[ 1, 2],
[ 2, 3]],

[[ 1, 2],
[ 2, 3],
[ 3, 4]],

[[ 2, 3],
[ 3, 4],
[ 4, 5]],

[[ 3, 4],
[ 4, 5],
[ 5, 6]],

[[ 4, 5],
[ 5, 6],
[ 6, 7]],

[[ 5, 6],
[ 6, 7],
[ 7, 8]],

[[ 6, 7],
[ 7, 8],
[ 8, 9]],

[[ 7, 8],
[ 8, 9],
[ 9, 10]],

[[ 8, 9],
[ 9, 10],
[10, 11]],

[[ 9, 10],
[10, 11],
[11, 12]]])

正如评论中所指出的,np.ix_ 可以用作快捷方式而不是 np.newaxis:

vfunc(*np.ix_(xv, yv, zv))

另请注意,对于这个愚蠢的简单函数,np.vectorize 不是必需的,实际上会严重损害我们的性能...

关于python:从网格节点在网格上构建迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com