matlab中如何把一个大数组中的一部分数选择复制到另一个小数组中

数组A是一个1*70的向量,数组B是一个1*40的向量。现在我想把数组A中较大的前40个数选择复制到数组B中,下列matlab程序为什么实现不了?请指导!十分感谢!
A=rand(1,70);
B=zeros(1,40);
k=0;
while k<=39
maxA=max(A);
posA=find(A==maxA);
POS=posA(1);
k=k+1;
B(k)=A(POS);
A(POS)=inf;
end

第1个回答  推荐于2017-05-21
posA=find(A==maxA)那里posA会变成inf吧,因为你A(POS)=inf。你可以直接把A(POS)删掉,写:

A(POS)=[];

话说用得着这么麻烦么。。。直接这样啊:
A=rand(1,70);
B=sort(A,'descend');
B=B(1:40);本回答被网友采纳
第2个回答  2015-11-05
总体思路:设定筛选条件,将数组中符合条件的元素筛选出来(可以筛选出元素值也可以筛选出元素对应的下标),然后将元素值赋值给另外一个数组的元素

参考代码:

clc
clear all
close all

x = randi(10, 1, 5); % 原始数据
disp('x=');
disp(x);

y1 = -1 * ones(1, length(x)); % 存储筛选出的结果,并初始化成不可能出现的结果
%-- 筛选符合条件的元素下标,并将对应元素存到y1 --%
ix = find(x>=3); % 例如,筛选出原始数据中大于3的元素的下标
if(isempty(ix))
disp('x的元素均不符合条件');
else
y1(1:length(ix)) = x(ix); % 将符合条件的元素存到y1中
y1( find(y1==-1) ) = []; % 剩余元素删除
disp('y1=');
disp(y1);
end
%----------------------------------------------%

y2 = -1 * ones(1, length(x)); % 存储筛选出的结果,并初始化成不可能出现的结果
%-- 筛选符合条件的元素值,并存入y2 --%
for i=1:length(x)
if(x(i)>=3) % 逐个检测x的元素是否符合条件,把符合条件的元素值赋值给y2
y2(i) = x(i);
end
end
y2( find(y2==-1) ) = []; % 剩余元素删除
disp('y2=');
disp(y2);
%----------------------------------%
输出结果

x=
7 1 9 10 7

y1=
7 9 10 7

y2=
7 9 10 7
第3个回答  2015-09-27
matlab中如何把一个大数组中的一部分数选择复制到另一个小数组中数组A是一个1*70的向量,数组B是一个1*40的向量。现在我想把数组A中较大的前40个数选择复制到数组B中,下列matlab程序为什么实现不了?请指导!十分感谢!
A=rand(1,70);
B=zeros(1,40);
k=0;
while k<=39
maxA=max(A);
posA=find(A==maxA);
POS=posA(1);
k=k+1;
B(k)=A(POS);
A(POS)=inf;
end
第4个回答  2014-05-26
把 A(POS)=inf; 改为
A(POS)=-inf;

应该就没有问题了。
inf表示无穷大,按理应该把这个挑选出来的最大值设置成最小值。