如何使用numpy有效地生成元组数组

我想使用 numpy.arange()并仅使用 numpy函数有效地生成一个元组numpy数组,其大小是每个轴的尺寸的倍数。 。例如:下面的 a_list 的大小为 max_i * max_j * max_k

此外,我想在下面的示例中获得的数组如下所示:[[(0,0),(0,1),...,(0,0,9), (0,1,0),(0,1,1),...,(9,4,14)]

a_list = list()
max_i = 10
max_j = 5
max_k = 15

for i in range(0,max_i):
  for j in range(0,max_j):
    for k in range(0,max_k):
      a_list.append((i,j,k))

以上依赖于列表和循环的循环的复杂度为O(max_i * max_j * max_k),我想使用分解的方式在numpy中生成相似的元组数组。有可能吗?

wuya0725000 回答:如何使用numpy有效地生成元组数组

我在评论中更喜欢Divakar的解决方案,但这是另一个。

您所描述的是cartesian product。在this post的帮助下,您可以实现以下目标

import numpy as np

# Input
max_i,max_j,max_k = (10,5,15)

# Build sequence arrays 0,1,... N
arr_i = np.arange(0,max_i)
arr_j = np.arange(0,max_j)
arr_k = np.arange(0,max_k)

# Build cartesian product of sequence arrays
grid = np.meshgrid(arr_i,arr_j,arr_k)
cartprod = np.stack(grid,axis=-1).reshape(-1,3)

# Convert to list of tuples
result = list(map(tuple,cartprod))
本文链接:https://www.f2er.com/3151621.html

大家都在问