我需要从一个任意大的矩阵中删除一个随机数量的列,我已将我的尝试放在下面,但我确信有更好的方法。
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
答案 0 :(得分:3)
这是一种方法。首先,使用numcols
元素生成随机数的行向量,其中numcols
是原始矩阵中的列数:
rc = rand(1,numcols)
接着从中制作1
和0
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