【发布时间】:2019-11-06 13:56:12
【问题描述】:
我想使用 numpy.arange() 并专门使用 numpy 函数 有效地生成一个 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 中生成一个相似的元组数组。有可能吗?
【问题讨论】:
-
元组基本上是 python 的一部分,而不是 numpy。你可以使用 3d 维度的数组吗?或者反过来,itertools?
-
从技术上讲,你的操作是 O(m * n * p),而不是 O(n * n * n),因为你大概有三个独立的量。三重循环具有最佳复杂度。即使使用 numpy,你也不会比每个变量的线性时间做得更好。
-
是的,谢谢你的最后一句话,我会纠正这个
-
你可以用
np.indices((max_i,max_j,max_k)).transpose(1,2,3,0).reshape(-1,3)得到一个二维数组。 -
另外,
k变化最快,所以第二个元素将是(0, 0, 1),而不是(1, 0, 0)。
标签: arrays python-3.x numpy tuples