首页 > 解决方案 > 如何使用 numpy 有效地生成元组数组

问题描述

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

此外,我想为下面的示例获取的数组如下所示: [(0,0,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))

上面的循环依赖于 list 和 for 循环的复杂度是 O(max_i*max_j*max_k),我想使用分解的方式在 numpy.xml 中生成一个相似的元组数组。可能吗 ?

标签: arrayspython-3.xnumpytuples

解决方案


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

您所描述的是笛卡尔积。在这篇文章的一些帮助下,您可以按如下方式实现

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))

推荐阅读