我有1-d NumPy
数组,它们表示n-d网格上的点。每个NumPy
数组表示维度中的点。我想生成一个合并的NumPy
数组,它将有一个形状为(n , m)
的n-d网格,其中n
将len(dim-1) * len(dim-2) * ...
,m
是维数
例如(二维情况):
In [1]: x = np.array([1, 2])
In [2]: x
Out[2]: array([1, 2])
In [3]: y = np.array([3, 4, 5])
In [4]: y
Out[4]: array([3, 4, 5])
In [5]: result = np.array([[1, 3], [1, 4],[1, 5],[2, 3],[2, 4],[2, 5]])
In [6]: result
Out[6]:
array([[1, 3],
[1, 4],
[1, 5],
[2, 3],
[2, 4],
[2, 5]])
另一个例子(3-D):
In [7]: x = np.array([1])
In [8]: y = np.array([2, 3])
In [9]: z = np.array([4, 5, 6])
In [10]: x
Out[10]: array([1])
In [11]: y
Out[11]: array([2, 3])
In [12]: z
Out[12]: array([4, 5, 6])
In [13]: result = np.array([[1, 2, 4], [1, 3, 4], [1, 2, 5], [1, 3, 5], [1, 2, 6], [1, 3, 6]])
In [14]: result
Out[14]:
array([[1, 2, 4],
[1, 3, 4],
[1, 2, 5],
[1, 3, 5],
[1, 2, 6],
[1, 3, 6]])
有没有一种方法可以很容易地在n维上实现这一点,而不必在每个数组中循环?你知道吗
您只需使用
itertools.product
就可以做到这一点 例如:这也适用于两种以上的输入:
您可以使用^{} 来创建扩展版版本,然后对这些版本的列主版本使用^{} ,如下所示-
为了使它具有通用性,使它适用于任何数量的输入情况,我们需要一些额外的工作,比如-
样本运行测试
2D
和3D
病例-这不是一个非常优雅的解决方案,但它可以完成:
相关问题 更多 >
编程相关推荐