Numpy 不同维数矩阵的级联
我对矩阵进行了串联,如下输出所示 但这不是很有效,因为我的代码是针对这两个矩阵的。有没有可能使它更高效,这样我就不必一直重写代码中的矩阵,而是让它自动工作 我的意思是,我不必在代码中编写我使用的矩阵,但它会自动传递 我想把它放在一个循环中,循环中的矩阵会有不同的变化Numpy 不同维数矩阵的级联,numpy,loops,python-3.7,numpy-ndarray,Numpy,Loops,Python 3.7,Numpy Ndarray,我对矩阵进行了串联,如下输出所示 但这不是很有效,因为我的代码是针对这两个矩阵的。有没有可能使它更高效,这样我就不必一直重写代码中的矩阵,而是让它自动工作 我的意思是,我不必在代码中编写我使用的矩阵,但它会自动传递 我想把它放在一个循环中,循环中的矩阵会有不同的变化 import numpy as np arr1=np.array([[11, 21,31], [12, 22,32], [13, 23,32], [14, 24,34]]) arr2=np.array([1,2,3,4]) a =
import numpy as np
arr1=np.array([[11, 21,31], [12, 22,32], [13, 23,32], [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., 1.],
[22., 2.],
[23., 3.],
[24., 4.],
[31., 1.],
[32., 2.],
[32., 3.],
[34., 4.]])
另一种选择:
In [246]: arr1
Out[246]:
array([[11, 21, 31],
[12, 22, 32],
[13, 23, 32],
[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, 3],
[4, 4, 4]])
In [249]: arr1.ravel(order='F') # the transpose ravel
Out[249]: array([11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 32, 34])
In [250]: arr3.ravel(order='F')
Out[250]: array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
以及预定义数组赋值的替代方法:
In [252]: np.stack((Out[249],Out[250]), axis=1)
Out[252]:
array([[11, 1],
[12, 2],
[13, 3],
[14, 4],
[21, 1],
[22, 2],
[23, 3],
[24, 4],
[31, 1],
[32, 2],
[32, 3],
[34, 4]])
这不一定更快、更直接或更一般。你说的自动工作是什么意思?