不同维度矩阵的串联

问题描述

我在输出中进行了矩阵的连接,如下所示。

但它不是很有效,因为我的代码是特定于这两个矩阵的。有没有可能让它更高效,这样我就不必一直重写代码中的矩阵,而是让它自动工作?

自动的意思是我不必在代码中编写我使用的矩阵,但它会自动通过

我想把它放在一个循环中,其中包含将要经过的矩阵的不同变体

import numpy as np
arr1=np.array([[11,21,31],[12,22,32],[13,23,[14,24,34]])
arr2=np.array([1,2,3,4])

a = np.zeros((arr1.flatten().shape[0],2)) #init the new array
a[:,[0]] = arr1.T.flatten()[:,None]  #fill the first column with the values
a[:,[1]] = np.tile(arr2,3)[:,None]  # fill the second column with values

结果

array([[11.,1.],[12.,2.],[13.,3.],[14.,4.],[21.,[22.,[23.,[24.,[31.,[32.,[34.,4.]])

解决方法

另一种选择:

In [246]: arr1
Out[246]: 
array([[11,21,31],[12,22,32],[13,23,[14,24,34]])
In [247]: arr3=np.repeat(arr2[:,None],3,1)   # a variation on your tile
In [248]: arr3
Out[248]: 
array([[1,1,1],[2,2,2],[3,3],[4,4,4]])
In [249]: arr1.ravel(order='F')            # the transpose ravel
Out[249]: array([11,12,13,14,31,32,34])
In [250]: arr3.ravel(order='F')
Out[250]: array([1,4])

以及分配给预定义数组的替代方法:

In [252]: np.stack((Out[249],Out[250]),axis=1)
Out[252]: 
array([[11,4],[21,[22,[23,[24,[31,[32,[34,4]])

这不一定更快、更直接或更通用。