python - 如何将列向量组合成矩阵

标签 python arrays numpy matrix vector

如何将多个列向量组合成一个矩阵?例如,如果我有 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/

相关文章:

python - 无法在python2.7中安装lxml

java - 在 Java 中打开大型数据集和实例化数据时遇到问题

php - Json_encode-将数组转换为json对象

python - 如何矢量化此 python 代码以使其更高效? (速度)

python - 计算具有不同 x 值的 y 值的平均值

python - Selenium Chrome 看不到浏览器日志 InvalidArgumentException

python - 安装正在开发的 Python/Cython(扩展)模块

c - 带有类型转换的讨厌的指针数组,Invalid Initializer 错误

python - 用 `AB⁻¹` 计算 `np.linalg.solve()`

python - Pandas 数据框根据嵌套 if 条件设置列值