7

でこぼこした行列があり、すべての行を連結したいので、1 つの長い配列になってしまいます。

#example

input:
[[1 2 3]
 [4 5 6}
 [7 8 9]]

output:
[[1 2 3 4 5 6 7 8 9]]

私が今やっている方法は、pythonicではないようです。もっと良い方法があると確信しています。

combined_x = x[0] 
for index, row in enumerate(x):
    if index!= 0:
        combined_x = np.concatenate((combined_x,x[index]),axis=1)

お手伝いありがとう。

4

2 に答える 2

9

ravelまたはflattenの方法をお勧めしndarrayます。

>>> a = numpy.arange(9).reshape(3, 3)
>>> a.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7, 8])

ravel次の場合を除いて、コピーを返さないため、concatenateより高速です。flatten

>>> a.ravel()[5] = 99
>>> a
array([[ 0,  1,  2],
       [ 3,  4, 99],
       [ 6,  7,  8]])
>>> a.flatten()[5] = 77
>>> a
array([[ 0,  1,  2],
       [ 3,  4, 99],
       [ 6,  7,  8]])

ただし、上記のメモリ共有を回避するためにコピーが必要な場合は、次のタイミングからわかるように、flattenよりも使用することをお勧めします。concatenate

>>> %timeit a.ravel()
1000000 loops, best of 3: 468 ns per loop
>>> %timeit a.flatten()
1000000 loops, best of 3: 1.42 us per loop
>>> %timeit numpy.concatenate(a)
100000 loops, best of 3: 2.26 us per loop

また、出力が示す正確な結果(1行の2次元配列)をreshape(Pierre GMに感謝します!)で達成できることにも注意してください。

>>> a = numpy.arange(9).reshape(3, 3)
>>> a.reshape(1, -1)
array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
>>> %timeit a.reshape(1, -1)
1000000 loops, best of 3: 736 ns per loop
于 2012-11-06T14:21:39.120 に答える
5

numpyconcatenate関数を使用できます。

>>> ar = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> np.concatenate(ar)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

あなたも試すことができますflatten

>>> ar.flatten()
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
于 2012-11-06T14:14:25.363 に答える