将阵列打包/解压缩到N-D阵列中

时间:2015-05-12 13:45:59

标签: python numpy

是否有快速方法将多个矩阵(具有不同形状)存储(打包)到一个N-D阵列中(N无关紧要),然后在需要时将其解包?

这是我快速而又肮脏的解决方案:

def pack(*matrices):
  return np.concatenate([a.flatten() for a in matrices])

def unpack(container):
  shapes = [ (64, 25), (64, 1), (25, 64), (25, 1) ] #Example
  sections = [ np.prod(shape) for shape in shapes ] 
  arrays = np.split(x, np.cumsum(sections))
  return [ np.reshape(a, shape) for a, shape in zip(arrays, shapes)]

上下文

我正在使用scipy.optimize.fmin_l_bfgs_b进行初步猜测'参数x0。在内部,执行x = array(x0, float64),这意味着需要一系列(元素可转换为)浮点数。如果x0 = [matrix1,matrix2,matrix3,...]则异常上升:

ValueError: setting an array element with a sequence.

因此,所有这些矩阵都需要打包成一系列浮点数,然后在需要时解压缩。

1 个答案:

答案 0 :(得分:0)

对我来说,最有效的方法是重写函数scipy.optimize.fmin_l_bfgs_b。这不应该是困难的

您可以在此处找到源代码:github