65

私は次のことをしようとしていますが、numpy配列を使用しています:

x = [(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)]
normal_result = zip(*x)

これにより、次の結果が得られます。

normal_result = [(0.1, 0.1, 0.1, 0.1, 0.1), (1., 2., 3., 4., 5.)]

ただし、入力ベクトルがnumpy配列の場合:

y = np.array(x)
numpy_result = zip(*y)
print type(numpy_result)

それは(予想通り)以下を返します:

<type 'list'>

問題は、この後、結果をnumpy配列に変換し直す必要があるということです。

私が知りたいのは、これらの前後の変換を回避する効率的なnumpy関数がある場合はどうなるかということです。

4

2 に答える 2

82

あなたはそれを転置することができます...

>>> a = np.array([(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)])
>>> a
array([[ 0.1,  1. ],
       [ 0.1,  2. ],
       [ 0.1,  3. ],
       [ 0.1,  4. ],
       [ 0.1,  5. ]])
>>> a.T
array([[ 0.1,  0.1,  0.1,  0.1,  0.1],
       [ 1. ,  2. ,  3. ,  4. ,  5. ]])
于 2012-10-05T11:02:58.517 に答える
36

dstackを使用してみてください:

>>> from numpy import *
>>> a = array([[1,2],[3,4]]) # shapes of a and b can only differ in the 3rd dimension (if present)
>>> b = array([[5,6],[7,8]])
>>> dstack((a,b)) # stack arrays along a third axis (depth wise)
array([[[1, 5],
        [2, 6]],
       [[3, 7],
        [4, 8]]])

したがって、あなたの場合は次のようになります。

x = [(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)]
y = np.array(x)
np.dstack(y)

>>> array([[[ 0.1,  0.1,  0.1,  0.1,  0.1],
    [ 1. ,  2. ,  3. ,  4. ,  5. ]]])
于 2012-10-05T11:05:08.023 に答える