从矩阵中删除随机数列

时间:2013-02-18 12:31:52

标签: matlab

我需要从一个任意大的矩阵中删除一个随机数量的列,我已将我的尝试放在下面,但我确信有更好的方法。

function new = reduceMatrices(original, colsToTakeAway)

a = colsToTakeAway(1);
b = colsToTakeAway(2);
c = colsToTakeAway(3);

x = original(1:a-1);
y = original(a+1:b-1);
z = original(b+1:c-1);

if c == size(original, 2);
    new = [x,y,z];
elseif (c+1) == size(original, 2);
    new = [x,y,z,c+1]
else
new = [x,y,z,c+1:size(original, 2)];

end

2 个答案:

答案 0 :(得分:3)

这是一种方法。首先,使用numcols元素生成随机数的行向量,其中numcols是原始矩阵中的列数:

rc = rand(1,numcols)

接着从中制作10 s的向量,例如

lv = rc>0.75

会产生类似

的东西
 0 1 1 0 1

您可以使用Matlab的逻辑索引功能编写

original(:,lv)

只会返回与original中的1对应的lv列。

从您的问题中不完全清楚如何制作列选择的向量,但这应该会给您一些想法。

答案 1 :(得分:0)

function newM = reduceMatrices(original, colsToTakeAway)

   % define the columns to keep := cols \ colsToTakeAway
   colsToKeep = setdiff(1:size(original,2), colsToTakeAway);

   newM = original(:, colsToKeep);

end