有没有办法解析 Octave 中矩阵的每一行?
Is there a way to parse each row of a matrix in Octave?
我是 Octave 的新手,我想知道是否有办法解析矩阵的每一行并单独使用它。最后我想用这些行来检查它们是否都相互垂直(点积必须等于 0 两个向量才能相互垂直)所以如果你对此有一些想法我很想听听他们。另外我想知道是否有一个函数可以确定矢量的长度(或幅度)。
提前致谢。
如果“解析每一行”是指逐行逐行的循环,则只需要一个 for
loop over the transposed 矩阵。这是可行的,因为 for
循环采用其参数的连续 列 。
示例:
A = [10 20; 30 40; 50 60];
for row = A.'; % loop over columns of transposed matrix
row = row.'; % transpose back to obtain rows of the original matrix
disp(row); % do whatever you need with each row
end
但是,在 Matlab/Octave 中通常可以避免循环,而采用 vectorized code. For the specific case you mention, computing the dot product between each pair of rows of A
is the same as computing the matrix product 的 A
次自身转置:
A*A.'
然而,对于复矩阵的一般情况,点积是用复共轭定义的,所以你应该使用 complex-conjugate transpose:
P = A*A';
现在 P(m,n)
包含 A
的第 n
行和第 m
行的点积。您要测试的条件相当于 P
是 diagonal matrix:
result = isdiag(P); % gives true of false
我是 Octave 的新手,我想知道是否有办法解析矩阵的每一行并单独使用它。最后我想用这些行来检查它们是否都相互垂直(点积必须等于 0 两个向量才能相互垂直)所以如果你对此有一些想法我很想听听他们。另外我想知道是否有一个函数可以确定矢量的长度(或幅度)。
提前致谢。
如果“解析每一行”是指逐行逐行的循环,则只需要一个 for
loop over the transposed 矩阵。这是可行的,因为 for
循环采用其参数的连续 列 。
示例:
A = [10 20; 30 40; 50 60];
for row = A.'; % loop over columns of transposed matrix
row = row.'; % transpose back to obtain rows of the original matrix
disp(row); % do whatever you need with each row
end
但是,在 Matlab/Octave 中通常可以避免循环,而采用 vectorized code. For the specific case you mention, computing the dot product between each pair of rows of A
is the same as computing the matrix product 的 A
次自身转置:
A*A.'
然而,对于复矩阵的一般情况,点积是用复共轭定义的,所以你应该使用 complex-conjugate transpose:
P = A*A';
现在 P(m,n)
包含 A
的第 n
行和第 m
行的点积。您要测试的条件相当于 P
是 diagonal matrix:
result = isdiag(P); % gives true of false