如何将列向量组合成矩阵

问题描述 投票:0回答:1

如何将多个列向量组合成矩阵?例如,如果我有3个10 x 1向量,如何将它们放入10 x 3矩阵中?这是到目前为止我尝试过的内容:

D0 =np.array([[np.cos(2*np.pi*f*time)],[np.sin(2*np.pi*f*time)],np.ones((len(time),1)).transpose()],'float').transpose()

这给了我类似的东西,

[[[ 1.00000000e+00  0.00000000e+00  1.00000000e+00]]

 [[ 9.99999741e-01  7.19053432e-04  1.00000000e+00]]

 [[ 9.99998966e-01  1.43810649e-03  1.00000000e+00]]

 ...

 [[ 9.99998966e-01 -1.43810649e-03  1.00000000e+00]]

 [[ 9.99999741e-01 -7.19053432e-04  1.00000000e+00]]

 [[ 1.00000000e+00 -2.15587355e-14  1.00000000e+00]]]

但是我不认为这是对的,它看起来更像是一个列表数组(而且我不能用这种形式进行矩阵乘法)...我也尝试了numpy.concatenate,但是那没有要么为我工作,要么下一步寻找堆栈。...

以Matlab表示法,我需要将其转换为表格D0 = [cos(2 * pi * f * t1),sin(2 * pi f t1),1; cos(2 * pi f t2),sin(2 * pi f t2),1; ....]等

以便找到最小二乘解s_hat:s_hat =(D0 ^ T D0)^-1(D0 ^ T x)

其中x是另一个输入向量,其中包含我要拟合的正弦曲线的样本。

在Matlab中,我可以输入

D0 = [cos(2*np.pi*f*time),sin(2*np.pi*f*time), repmat(1,len(time),1)]

创建D0矩阵。如何在python中执行此操作?

谢谢!

python arrays numpy matrix vector
1个回答
0
投票

这里您在Matlab和Python / NumPy中具有等效的完整示例:

% Matlab
f = 0.1;
time = [0; 1; 2; 3];
D0 = [cos(2*pi*f*time), sin(2*pi*f*time), repmat(1,length(time),1)]
# Python
import numpy as np
f = 0.1
time = np.array([0, 1, 2, 3])
D0 = np.array([np.cos(2*np.pi*f*time), np.sin(2*np.pi*f*time), np.ones(time.size)]).T
print(D0)

[请注意,与Matlab不同,Python / NumPy没有特殊的语法来区分行与列(在Matlab中为,;)。类似地,一维NumPy数组没有作为“列”或“行”向量的概念。如上所述,当将多个1D NumPy数组合并为一个2D数组时,每个1D数组最终以2D数组中的一行结尾。当您希望将它们作为列时,需要转置2D数组,这里只需通过.T属性即可完成。

© www.soinside.com 2019 - 2024. All rights reserved.