ここ
In [469]: coords = [[1,2,3],[4,5,6]]
In [470]: it = itertools.product(*coords)
In [471]: arr = np.array(list(it))
In [472]: arr
Out[472]:
array([[1, 4],
[1, 5],
[1, 6],
[2, 4],
[2, 5],
[2, 6],
[3, 4],
[3, 5],
[3, 6]])
fromiter
は、適切な構造化dtype
で動作します、これらの値を持つ配列を生成するにはいくつかのnumpyの方法があります。
In [473]: it = itertools.product(*coords)
In [474]: arr = np.fromiter(it, dtype='i,i')
In [475]: arr
Out[475]:
array([(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5),
(3, 6)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
は、しかし、通常我々は、ツールを使用しているnumpy
シーケンスとメッシュの生成を提供します。 np.arange
はすべての場所で使用されています。
meshgrid
が広く用いられている。試行錯誤のビットで、私は、私はその出力をトランスポーズ、同じシーケンスを生成できることが分かっ:
In [481]: np.transpose(np.meshgrid(coords[0], coords[1], indexing='ij'), (1,2,0)).reshape(-1,2)
Out[481]:
array([[1, 4],
[1, 5],
[1, 6],
[2, 4],
[2, 5],
[2, 6],
[3, 4],
[3, 5],
[3, 6]])
repeat
とtile
このようなタスクのためにも有用である:
In [487]: np.column_stack((np.repeat(coords[0],3), np.tile(coords[1],3)))
Out[487]:
array([[1, 4],
[1, 5],
[1, 6],
[2, 4],
[2, 5],
[2, 6],
[3, 4],
[3, 5],
[3, 6]])
私がやりました過去にはfromiter
のいくつかのタイミング。私の記憶は、np.array
以上の控えめな時間節約しか提供しないということです。
Aが戻っている間、私はitertools
とfromiter
を探求し、itertools.chain
convert itertools array into numpy array
In [499]: it = itertools.product(*coords)
In [500]: arr = np.fromiter(itertools.chain(*it),int).reshape(-1,2)
In [501]: arr
Out[501]:
array([[1, 4],
[1, 5],
[1, 6],
[2, 4],
[2, 5],
[2, 6],
[3, 4],
[3, 5],
[3, 6]])
ので、使用してそれらを結合する方法を発見し、理由がありますが 'ARR = np.array(リスト(反復可能) ) 'あなたのために働かないのですか?あなたはおそらく 'np.formiter'を探していますが、多次元配列をうまく扱うことはできません。最後に試しました。 –
また、ゼロの配列を作成し、個々の値を入力することもできます。それは速くて、おそらく:http://forthescience.org/blog/2015/06/07/performance-of-filling-a-numpy-array/... numpyを持つ良い方法があったかどうか疑問に思っていたiterablesはPythonのどこにでもポップアップするので、作業をしてください。 – Scott
残念ながら、AFAIKはiterablesから1次元配列を構築するためのサポートしかありません。この交換をチェックしてください:https://mail.scipy.org/pipermail/numpy-discussion/2007-August/028898.html 確かに、彼らは '空'を使用することを提案します! –