Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在matlab中,通过从无回路的阵列中移除不同元素来构造矩阵_Arrays_Matlab_For Loop_Matrix - Fatal编程技术网

Arrays 在matlab中,通过从无回路的阵列中移除不同元素来构造矩阵

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(

给定一个大小为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(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,:);

但是,如果生成要保留的元素的索引而不是要删除的元素的索引,则效率更高。

我看不出如何通过从数组中删除某些内容来获得矩阵请详细说明您的问题,添加示例代码,并澄清前面关于数组如何成为矩阵的评论。下面的答案似乎适合您的需要