为什么我不能使用运算符优先级来编写 $sum((A.^2)(:))$ 这样的语句
Why can't I employ operator precedence to write statement like $sum((A.^2)(:))$
我想计算 n 维矩阵的 L2 范数。我想在一条语句中计算它,而不引入时间变量。但好像我不得不,因为如果我这样写,它会抱怨括号不平衡,
sqrt(sum((A.^2)(:)))
所以不得不引入一个时间矩阵B,这样写
B = A.^2
sqrt(sum(B(:)))
有什么技巧可以避免这种情况吗?我还发现如果一个函数returns一个矩阵,我也不能这样写
(fun(A))(:)
我主要担心的是为什么运算符优先级在这里不起作用。
有几种方法可以在一行中解决这个问题。
一种选择是使用重塑函数,将 A 重塑为向量,如下所示:
sqrt(sum(reshape(A,prod(size(A)),1).^2))
另一种选择是使用 Matlab's builtin function:
sqrt(sum(builtin('_paren', A(:)).^2))
我想计算 n 维矩阵的 L2 范数。我想在一条语句中计算它,而不引入时间变量。但好像我不得不,因为如果我这样写,它会抱怨括号不平衡,
sqrt(sum((A.^2)(:)))
所以不得不引入一个时间矩阵B,这样写
B = A.^2
sqrt(sum(B(:)))
有什么技巧可以避免这种情况吗?我还发现如果一个函数returns一个矩阵,我也不能这样写
(fun(A))(:)
我主要担心的是为什么运算符优先级在这里不起作用。
有几种方法可以在一行中解决这个问题。 一种选择是使用重塑函数,将 A 重塑为向量,如下所示:
sqrt(sum(reshape(A,prod(size(A)),1).^2))
另一种选择是使用 Matlab's builtin function:
sqrt(sum(builtin('_paren', A(:)).^2))