NumPy 中有 unstack 吗?

Art*_*oul 10 python numpy

NumPy中有np.stack,但是否有与tf.unstack相同的相反项?np.unstack

Ivo*_*ius 12

这么晚才发现,这里有一个更简单的答案:

\n
def unstack(a, axis=0):\n    return np.moveaxis(a, axis, 0)\n#    return list(np.moveaxis(a, axis, 0))\n
Run Code Online (Sandbox Code Playgroud)\n

作为奖励,结果仍然是一个 numpy 数组。如果你只是用 python 解包它,就会发生解包:

\n
A, B, = unstack([[1, 2], [3, 4]], axis=1)\nassert list(A) == [1, 3]\nassert list(B) == [2, 4]\n
Run Code Online (Sandbox Code Playgroud)\n

毫不奇怪,它也是最快的:

\n
# np.squeeze\n\xe2\x9d\xaf python -m timeit -s "import numpy as np; a=np.array(np.meshgrid(np.arange(1000), np.arange(1000)));" "C = [np.squeeze(e, 1) for e in np.split(a, a.shape[1], axis = 1)]"\n100 loops, best of 5: 2.64 msec per loop\n    \n# np.take\n\xe2\x9d\xaf python -m timeit -s "import numpy as np; a=np.array(np.meshgrid(np.arange(1000), np.arange(1000)));" "C = [np.take(a, i, axis = 1) for i in range(a.shape[1])]"       \n50 loops, best of 5: 5.08 msec per loop\n\n# np.moveaxis\n\xe2\x9d\xaf python -m timeit -s "import numpy as np; a=np.array(np.meshgrid(np.arange(1000), np.arange(1000)));" "C = np.moveaxis(a, 1, 0)"\n100000 loops, best of 5: 3.89 usec per loop\n\n# list(np.moveaxis)\n\xe2\x9d\xaf python -m timeit -s "import numpy as np; a=np.array(np.meshgrid(np.arange(1000), np.arange(1000)));" "C = list(np.moveaxis(a, 1, 0))"\n1000 loops, best of 5: 205 usec per loop\n
Run Code Online (Sandbox Code Playgroud)\n