为什么我不能使用运算符优先级来编写 $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))