【发布时间】:2017-01-05 18:31:49
【问题描述】:
我想使用 itertools 的各种函数来创建 numpy 数组。我可以很容易地提前计算出产品中元素的数量、组合、排列等,因此分配空间应该不是问题。
例如
coords = [[1,2,3],[4,5,6]]
iterable = itertools.product(*coords)
shape = (len(coords[0]), len(coords[1]))
arr = np.iterable_to_array(
iterable,
shape=shape,
dtype=np.float64,
count=shape[0]*shape[1]
) #not a real thing
answer = np.array([
[1,4],[1,5],[1,6],
[2,4],[2,5],[2,6],
[3,4],[3,5],[3,6]])
assert np.equal(arr, answer)
【问题讨论】:
-
那么,
arr = np.array(list(iterable))不适合您是有原因的吗?您可能正在寻找np.formiter,但它不能很好地处理多维数组,我上次尝试过。 -
我还可以创建一个零数组,然后填充各个值。那会更快,可能:forthescience.org/blog/2015/06/07/…... 只是想知道是否有一种好方法让 numpy 完成这项工作,因为在 python 中到处都会出现迭代。
-
不幸的是,AFAIK 仅支持从可迭代对象构建一维数组。看看这个交流:mail.scipy.org/pipermail/numpy-discussion/2007-August/…确实,他们建议使用
empty! -
我也很怀疑。谢谢!
标签: python arrays numpy itertools