Arrays 在matlab中,通过从无回路的阵列中移除不同元素来构造矩阵
给定一个大小为160*1的离散正整数向量Arrays 在matlab中,通过从无回路的阵列中移除不同元素来构造矩阵,arrays,matlab,for-loop,matrix,Arrays,Matlab,For Loop,Matrix,给定一个大小为160*1的离散正整数向量X,以及一个大小为40*200的表Tb1,其中包含要从X中删除的索引列表Tb1中200列中的每列指向要从原始X中删除的40个元素 我使用for循环创建了剩余120*200个元素的新矩阵,循环次数为200次,在循环I时,根据Tb1(:,I)中列出的索引,从原始X的副本中删除40个元素,但这需要太多的时间和内存 如何在不使用循环且操作次数最少的情况下获得结果?以下是不同的方法: 方法1: idx = ~hist(tbl, 1:160); [f,~]=find(
X
,以及一个大小为40*200的表Tb1
,其中包含要从X
中删除的索引列表Tb1
中200列中的每列指向要从原始X
中删除的40个元素
我使用for
循环创建了剩余120*200个元素的新矩阵,循环次数为200次,在循环I
时,根据Tb1(:,I)
中列出的索引,从原始X
的副本中删除40个元素,但这需要太多的时间和内存
如何在不使用循环且操作次数最少的情况下获得结果?以下是不同的方法: 方法1:
idx = ~hist(tbl, 1:160);
[f,~]=find(idx);
result1 = reshape(M(f),120,200);
方法2:
idx = ~hist(tbl, 1:160);
M2=repmat(M,200,1);
result2 = reshape(M2(idx),120,200);
方法3和4:
% idx can be generated using accumarray
idx = ~accumarray([tbl(:) reshape(repmat(1:200,40,1),[],1)],true,[160,200],@any);
%... use method 1 and 2
方法5:
M5=repmat(M,200,1);
M5(bsxfun(@plus,tbl,0:160:160*199))=[];
result5 = reshape(M5,120,200);
假设M
是一个整数数组,tbl
是索引表
可使用以下数据对其进行测试:
M = rand(160,1);
[~,tbl] = sort(rand(160,200));
tbl = tbl(1:40,:);
但是,如果生成要保留的元素的索引而不是要删除的元素的索引,则效率更高。我看不出如何通过从数组中删除某些内容来获得矩阵请详细说明您的问题,添加示例代码,并澄清前面关于数组如何成为矩阵的评论。下面的答案似乎适合您的需要