考虑一个形状为
A
的numpy数组(3,)
。然后是下面一行
x,y,z = A
将
x
分配给 A[0]
,将 y
分配给 A[1]
以及将 z
分配给 A[2]
。 Supoose 现在 A
而不是具有形状 s + (3,)
对于一些任意形状 s
。我想将 x
分配给 A[...,0]
,y
分配给 A[...,1]
和 z
分配给 A[...,2]
。上面一行
x,y,z = A
不起作用并给出一个 ValueError:没有足够的值来解压(预期 3,得到 2)[当
A
具有 (2,3)
形状时]。如何以干净的方式进行所需的分配?显然如下
x,y,z = A[...,0], A[...,1], A[...,2]
有效,但如果 3 被一些大数字代替,则有点乏味。
numpy.rollaxis
:
x, y, z = np.rollaxis(A, -1)
假设这个输入:
array([[[0, 1, 2],
[3, 4, 5]]])
输出:
# x, y, z
(array([[0, 3]]), array([[1, 4]]), array([[2, 5]]))
这适用于任何位置,只需指定要用作
rollaxis
的第二个参数的维度:
x, y, z = np.rollaxis(A, 2)