我有两个numpy数组,定义网格的x和y轴.例如:
x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)
我想生成这些数组的笛卡尔积来生成:
array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)
在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product并返回到numpy数组并不是最有效的形式.
这个问题基于这个较老的问题:
给定一个数组:
Run Code Online (Sandbox Code Playgroud)In [122]: arr = np.array([[1, 3, 7], [4, 9, 8]]); arr Out[122]: array([[1, 3, 7], [4, 9, 8]])鉴于其指数:
Run Code Online (Sandbox Code Playgroud)In [127]: np.indices(arr.shape) Out[127]: array([[[0, 0, 0], [1, 1, 1]], [[0, 1, 2], [0, 1, 2]]])我怎样才能将它们整齐地叠在一起形成一个新的2D阵列?这就是我想要的:
Run Code Online (Sandbox Code Playgroud)array([[0, 0, 1], [0, 1, 3], [0, 2, 7], [1, 0, 4], [1, 1, 9], [1, 2, 8]])
Divakar的这个解决方案是我目前用于2D阵列的解决方案:
def indices_merged_arr(arr):
m,n = arr.shape
I,J = np.ogrid[:m,:n]
out = np.empty((m,n,3), dtype=arr.dtype)
out[...,0] = I
out[...,1] = …Run Code Online (Sandbox Code Playgroud)