Matlab Central Cody Problem 7
Problem 7. Column Removal
Remove the nth column from input matrix A and return the resulting matrix in output B.
So if
A = [1 2 3;
4 5 6];
and n = 2, then B is
[ 1 3;
4 6 ]
这道题目要求把矩阵中的某一列给删除,想了半天就只会分类讨论所要删除的列所在的位置(始端,末端,中间),很麻烦,但依然记录下来,代码如下所示。
function B = column_removal(A,n)
if n == 1
B = A(:,2:end);
end
if n == size(A,2)%size的用法用来表示矩阵A的列数,表示矩阵行数的话则是使用size(A,1)
B = A(:,1:end-1);
end
if n > 1 && n < size(A,2)
B1 = A(:,1:n-1);
B2 = A(:,n+1:end)
B = [B1 B2];
end
end
其实对于n的考虑还可以有更多,因为n的输入可能不在矩阵A的列数范围之内,不过看到该题目中所涉及到的test里面并没有这种情况所以就没有再讨论了,由此也可以看出是具有一定的局限性的,所以肯定存在更简单的方法,在查看了别人的solution之后,发现其实用一个语句就可以解决问题,代码如下所示。
function B = column_removal(A,n)
B = A;%把矩阵A赋值给矩阵B
B(:,n) = []; %删除B矩阵中第n列,若删除第n行则应为B(n,:) = []
end
上述代码中如果不需要返回一个新的矩阵B(好像完全可以不需要矩阵B😅),代码得到进一步简化如下所示。
function A = column_removal(A,n)
A(:,n) = []; %删除A矩阵中第n列
end