如何将多个列向量组合成一个矩阵?例如,如果我有 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;....] etc
这样我就可以找到最小二乘解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 数组没有“列”或“行”向量的概念。如上所述,当将多个一维 NumPy 数组合并为一个二维数组时,每个一维数组最终都会成为二维数组中的一行。由于您希望将它们作为列,因此需要转置二维数组,此处只需通过 .T
属性即可完成。
关于python - 如何将列向量组合成矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60493932/