问题描述
我在输出中进行了矩阵的连接,如下所示。
但它不是很有效,因为我的代码是特定于这两个矩阵的。有没有可能让它更高效,这样我就不必一直重写代码中的矩阵,而是让它自动工作?
我自动的意思是我不必在代码中编写我使用的矩阵,但它会自动通过
我想把它放在一个循环中,其中包含将要经过的矩阵的不同变体
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]])
这不一定更快、更直接或更通用。