0

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

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
4

2 回答 2

3

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

rc = rand(1,numcols)

接下来制作一个1s 和0s 的向量,例如

lv = rc>0.75

这将产生类似的东西

 0 1 1 0 1

并且可以使用 Matlab 的逻辑索引功能来编写

original(:,lv)

这将只返回与s 中的 soriginal相对应的那些列。1lv

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

于 2013-02-18T13:03:46.363 回答
0
function newM = reduceMatrices(original, colsToTakeAway)

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

   newM = original(:, colsToKeep);

end
于 2013-02-18T13:00:49.827 回答