从 numpy 数组的最后一个轴中提取值

问题描述 投票:0回答:1

考虑一个形状为

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 被一些大数字代替,则有点乏味。

python numpy numpy-ndarray
1个回答
2
投票

您可以使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.