如何将多个列向量组合成矩阵?例如,如果我有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中执行此操作?
谢谢!
这里您在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
属性即可完成。