根据用户输入函数返回多个矩阵

时间:2016-11-07 21:01:59

标签: python numpy

我有一个接受用户参数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的每个可能值进行硬编码?

感谢。

2 个答案:

答案 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 -

更短
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