考虑一个形状为(3,)
的numpy数组A
。那么下面这行
x,y,z = A
将x
分配给A[0]
,将y
分配给A[1]
,将z
分配给A[2]
。假设现在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被某个大数字取代,则有点乏味。
1条答案
按热度按时间8i9zcol21#
可以使用
numpy.rollaxis
:假设此输入:
输出:
这适用于任何位置,只需指定要用作
rollaxis
的第二个参数的尺寸:计时:
shape = (7,6,8,2,1,4,5,9,3) ; A = np.arange(np.prod(shape)).reshape(shape)
作为输入。