我经常需要使用MATLAB逐行操作很多矩阵。
而不必输入:
m(x, :);
每当我想引用特定行时,我创建了anonymous MATLAB function:
row = @(x) m(x, :);
允许我拨打row(x)
并获取正确的行。
但似乎这个匿名函数实际上与直接调用m(x, :)
不同,因为对矩阵的引用丢失了。所以,当我打电话时:
row(2) = 2 * row(2);
MATLAB返回错误:
错误:无法为函数句柄类型执行索引分配
错误:分配失败,或者没有'函数句柄=矩阵'
的方法
有没有办法定义一个函数句柄来解决这个问题,或者我最好只是在我想引用一行时键入m(x, :)
?
非常感谢!
答案 0 :(得分:1)
我认为你最好输入m(x,:)
!它比做row(x)
快得多。匿名函数row
的另一个问题是它将保留原始矩阵m
,而不会改变。
这是一个匿名函数,可以满足您的需求,我认为这是一种合理的做事方式。 row(a,b,c)
将矩阵的b
&#39行(不一定是正方形)a
乘以c
。
x=rand(5)
row=@(x,i,k) (diag([ones(1,i-1) k ones(1,size(x,1)-(i))]))*x
x=row(x,2,20)
最终,我认为最简单的方法是创建一个独立的函数来执行每种类型的行操作。例如,
function x=scalarmult(x,i,k)
x(i,:)=k*x(i,:);
和
function x=addrows(x,i,j)
x(i,:)=x(i,:)+x(j,:);
和
function x=swaprows(x,i,j)
x([i,j],:)=x([j,i],:);