【发布时间】:2022-01-27 03:40:30
【问题描述】:
我正在尝试为三个在 python 中共同正常的随机变量生成 N 个数据点。 如果我使用以下代码:
import numpy as np
import scipy
import pandas
import sys
from scipy.linalg import block_diag
from pandas import *
N=100
Sigma=np.identity(3)
Mu=np.zeros((3,1))
Z=np.random.multivariate_normal(Mu, Sigma, N)
我收到以下错误消息:
in
Z=np.random.multivariate_normal(Mu, Sigma, N)
File "mtrand.pyx", line 4067, in numpy.random.mtrand.RandomState.multivariate_normal
ValueError: mean must be 1 dimensional
这意味着
np.zeros((3,1))
的维度不是
1
。将行
Mu=np.zeros((3,1))
更改为
Mu=np.zeros(3)
后,它可以工作。这意味着
np.zeros(3)
是
1
维度的。
由于
np.zeros(3)
和
np.zeros((3,1))
都是三个零的数组,我想自然两者都应该是一维的。在每种情况下使用
Mu.ndim
,我发现
np.zeros(3)
的维度是一,
np.zeros((3,1))
的维度是二。我的问题是:
为什么 Python 在尺寸方面区分
np.zeros((3,1))
和
np.zeros(3)
(为什么这种区分有用)?
-
具有 3 个标量和 3x1 矩阵的向量是不同的东西吗?这就是 1d 和 2d 的区别。
-
@CJR 谢谢!在其他一些语言中,例如 MATLAB,一个具有 3 个标量的向量和一个 3x1 矩阵是一回事。在线性代数中,它们也是一回事。它们在计算机科学中是否被视为不同的事物?
-
线性代数认为 3 空间中的向量与 1 空间中的超定方程组相同吗?
-
@CJR 这两件事在线性代数中当然是不同的。我的意思是,在线性代数中,我们不区分具有 3 个坐标的向量和 3x1 矩阵。例如,线性代数中的$[0 0 0]^\top$既是3维向量又是3x1矩阵。
-
在 MATLAB 中,一切都是二维的。 “标量”的大小为 (1,1)。在
numpy
中,任何维度 0-32 都是可能的。np.zeros((1,1,3,1)
是具有 3 个元素的 4d。 Python 有标量和列表。列表是一维的,尽管它们可能是嵌套的。