我有一个数组:
Z = [1 24 3 4 52 66 77 8 21 100 101 120 155];
我有另一个阵列:
deletevaluesatindex=[1 3; 6 7;10 12]
我想在数组Z
中表示的索引(1到3,6到7,10到12)中删除数组deletevaluesatindex
中的值
所以Z
的结果是:
Z=[4 52 8 21 155];
我尝试使用下面的表达式,但它不起作用:
X([deletevaluesatindex])=[]
答案 0 :(得分:1)
out = 4 52 8 21 155
<?xml version="1.0" encoding="utf-32"?>
<MailTo>
<To Name="Boss">
<name>Name1</name>
<mail>Name1@Mail.com</mail>
</To>
<Cc Name="Trainee">
<name>Name2</name>
<mail>Name2@Mail.com</mail>
</Cc>
<Cc Name="Manager">
<name>Name3</name>
<mail>Name3@Mail.com</mail>
</Cc>
<Cc Name="Assistant">
<name>Name4</name>
<mail>Name4@Mail.com</mail>
</Cc>
</MailTo>
答案 1 :(得分:0)
如果您控制deletevaluesatindex
的生成方式,您可以使用MATLAB的冒号运算符直接生成范围,并使用
deletevaluesatindex=[1:3 6:7 10:12]
然后使用您建议的表达式
Z([deletevaluesatindex])=[]
如果您必须使用deletevaluesatindex
,则可以使用循环或类似this
lo = deletevaluseatindex(:,1)
up = deletevaluseatindex(:,2)
x = cumsum(accumarray(cumsum([1;up(:)-lo(:)+1]),[lo(:);0]-[0;up(:)]-1)+1);
deleteat = x(1:end-1)
答案 2 :(得分:0)
编辑,如评论所述,此解决方案仅适用于GNU Octave
使用bsxfun这是可能的:
Z=[1 24 3 4 52 66 77 8 21 100 101 120 155];
deletevaluesatindex = [1 3; 6 7;10 12];
idx = 1:size(deletevaluesatindex ,1);
idx_rm=bsxfun(@(A,B) (A(B):deletevaluesatindex (B,2))',deletevaluesatindex (:,1),idx);
Z(idx_rm(idx_rm ~= 0))=[]
答案 3 :(得分:0)
这样做:
rdvi= size(deletevaluesatindex,1); %finding rows of 'deletevaluesatindex'
temp = cell(1,rdvi); %Pre-allocation
for i=1:rdvi
%making a cell array of elements to be removed
temp(i)={deletevaluesatindex(i,1):deletevaluesatindex(i,2)};
end
temp = cell2mat(temp); %Now temp array contains the elements to be removed
Z(temp)=[] % Removing the elements