配列を転置してフラット化できます。
d = numpy.array([a, b, c]).T.flatten()
配列を組み合わせる別の方法は、次を使用することnumpy.vstack()
です。
d = numpy.vstack((a, b, c)).T.flatten()
(ちなみに、どちらが速いかわかりません。)
編集:Nicolas Barbeyの回答に応えて、データを1回だけコピーする方法は次のとおりです。
d = numpy.empty((len(a), 3), dtype=a.dtype)
d[:, 0], d[:, 1], d[:, 2] = a, b, c
d = d.ravel()
このコードは、コピーを作成する必要のない方法でデータがレイアウトされることを保証しravel()
ます。実際、私のマシンの元のコードよりもかなり高速です。
In [1]: a = numpy.arange(0, 30000, 3)
In [2]: b = numpy.arange(1, 30000, 3)
In [3]: c = numpy.arange(2, 30000, 3)
In [4]: def f(a, b, c):
...: d = numpy.empty((len(a), 3), dtype=a.dtype)
...: d[:, 0], d[:, 1], d[:, 2] = a, b, c
...: return d.ravel()
...:
In [5]: def g(a, b, c):
...: return numpy.vstack((a, b, c)).T.ravel()
...:
In [6]: %timeit f(a, b, c)
10000 loops, best of 3: 34.4 us per loop
In [7]: %timeit g(a, b, c)
10000 loops, best of 3: 177 us per loop