Ivo*_*ius 12
这么晚才发现,这里有一个更简单的答案:
\ndef 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 解包它,就会发生解包:
\nA, 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
归档时间: |
|
查看次数: |
12727 次 |
最近记录: |