我有一个接受用户参数k的函数,并生成以下形式的矩阵:
a = np.array((k,2,5))
离开函数我想返回 k 2x5矩阵。从本质上讲,
if k == 2:
return a[0,:,:], a[1,:,:]
if k == 3:
return a[0,:,:], a[1,:,:], a[2,:,:]
有没有办法动态地执行此操作而无需对k的每个可能值进行硬编码?
感谢。
答案 0 :(得分:2)
不确定
return tuple(a[i,:,:] for i in range(k))
Python太棒了! 8 - ))
答案 1 :(得分:2)
这是一种使用np.array_split
-
np.array_split(a[:k].reshape(-1,a.shape[-1]),k)shorter
更短
np.vsplit(a[:k].reshape(-1,a.shape[-1]), k)
请注意,如果您要将相关功能的输出分配给k
个输出,您不需要所有这些混乱,只需返回切片即可。即:return a[:k]
。
举个例子:
In [595]: a = np.random.rand(4,2,5)
In [596]: k = 3
In [597]: a0,a1,a2 = a[:k]
In [598]: np.allclose(a0, a[0,:,:]) # Verify for all three outputs
Out[598]: True
In [599]: np.allclose(a1, a[1,:,:])
Out[599]: True
In [600]: np.allclose(a2, a[2,:,:])
Out[600]: True