我试图复制这个公式:
我已经在工作区中收集了所有变量。然而,估计vec(Theta')
似乎不起作用,所以我有点卡住了。
Theta = A*B-C;
vTheta = vec(Theta');
A
,B
和C
已定义。问题是MATLAB似乎不知道函数vec
来执行我想要对Theta
执行的操作,如公式中那样。
如何解决这个问题?
答案 0 :(得分:0)
我不知道你从哪里得到这个等式,但是vec
是R中的一个函数,也许它与此有关?如果要将矩阵Theta
转换为矢量,请执行
Theta(:)
编辑:如果您需要首先转置矩阵,MATLAB可能不允许您Theta'(:)
。而是分两步完成:
tmp = Theta'; tmp(:)
答案 1 :(得分:0)
Colon Operator上方是向量化定义的变量的方式。
但是,有时候我们想要向量化变量的子集。
假设我们有一个矩阵-mA
,我们想向量化它的一个子部分-mA(2:3, 4:7)
。
一种方法是定义一个新变量并将其向量化:
vA = mA(2:3, 4:7);
vA = vA(:);
但是,如果我们只想在另一个表达式中仅使用一次,该怎么办?
我们可以摆脱生成显式变量的需要吗?
不幸的是,MATLAB不具有view()中的Julia功能。
但是,如果您想避免明确命名新变量(我不确定MATLAB的JIT Engine是否也可以像Julia一样使内存分配无效),您可以这样做:
reshape(mA(2:3, 4:7), [], 1)
这将始终产生列向量。
您还可以使用:
reshape(mA(2:3, 4:7), 1, [])
生成行向量。
例如,您可以这样做:
reshape(mA(2:3, 4:7), 1, []) * reshape(mA(2:3, 4:7), [], 1, )
这将是这些元素的平方值之和。