2016-05-08 9 views

答えて

3

実際にはループは必要ありません。あなたは、MATLABのインデックスプロパティを使用して要素「= 1000 <」を削除することができます。

array(array <= 1000)=[] 

編集コメントに

を質問に答えるために、インデックスのプロパティで別の配列から

を他の要素を削除します

最初の配列でremoreしたいものと同じ位置にある別の配列の要素を削除するには、それらの位置のインデックスを格納してから、2番目のarrの要素にアドレス指定する必要があります

命令:

logical_idx=array <= 1000; 

である配列logical_idxを返しAY:あなたが最初の配列のインデックスを探すときlogicalインデックスまたはdouble指標として

、あなたはどちらかそれらを評価することができますlogicalタイプは、それが

ある - 条件が検証された場合1

から0それがない場合

find関数が条件満たす配列の要素「見つける」ために使用することができる

double型で、この場合には、アレイである返さ

double_idx=find(array <= 1000) 

を。

logicalインデックスを使用して配列の要素にアクセスする場合、選択された配列は論理配列内の1に対応するものです。一例として、logicalインデックス配列である場合:

[0 1 1 0 0]

第二第三の要素が選択されます。

doubleインデックスを使用すると、インデックスで指定された位置を考慮してアクセスされます。前の例に関しては、インデックス配列のdoubleバージョンは次のようになります。

[2 3] 

あなたがの要素にアクセスするためにそれらを使用することができます(上記の二つのアプローチのいずれかを使用して)インデックスを識別した後異なる配列。

  • array:あなたは要素を探していたもので<= 1000

  • array_1を削除する:削除したいから二番目の配列あなたは3つのアレイを持っていると仮定すると

    削除された要素と同じ位置にある要素array

  • array_11:と似ています

これは二つのアプローチが使用された例である:あなたが新しい配列を作成する必要がforループを使用する場合は

% Identify the logical indexes of the element to be removed 
logical_idx=array <= 1000; 
% Identify the integer indexes of the element to be removed 
double_idx=find(array <= 1000); 

% Remove the unwanted elements by "direct" indexing 
array(array <= 1000)=[] 
% Remove unwanted elements using logical indexes 
array_1(logical_idx)=[] 
% Remove unwanted elements using integer indexes 
array_11(double_idx)=[] 

エンド編集

"新しい" arrrayに保存されなければならない元の配列の要素を特定するために "if"の条件を "逆転"します(あなたがdiscrardしてはいけないもの)。

array_2=[]; 
cnt=0; 
for i=1:length(array) 
    if(array(i) > 1000) 
     cnt=cnt+1; 
     array_2(cnt)=array(i); 
    end 
end 

これが役に立ちます。

Qapla」

+0

il_raffaをその要素<= 1000を削除し、同じインデックスで、それはまた、インデックスのプロパティで別の配列から他の要素を除去することが可能です。このように:i = 1; while i:length(array) if(array(i)<= 1000) array(i)= []; array1(i)= []; else i = i + 1; end end – user3662189

+0

私はあなたに慣れてきました。私は、今日あなたの質問に答えることができます(property_をインデックスに登録することによって他の配列から他の要素を取り除いてください)。 –

+0

ここにいるよ。私はあなたの質問に対処するためにanswserを更新しました(他の配列の他の要素をindex_propertyで削除する_)。 –

0

あなたはループのためにコードを変換するには、次のコードを使用することができます。

for i=1:length(array) 

    some code here 
end 

あなたのコードを見ると、おそらくこれを行列操作として書き直したいと思うかもしれません。あなたのコードは1000未満のものを取り除いているようですが、その場合はそれらの値を削除するためにMATLABの配列インデックス機能を使うべきです(下記参照)。

array(array<1000)=[]; 

解決策は、はるかに速く、理解しやすくなるでしょう。

1

このお試しください:私はオプション1を使用した場合

for i=1:1:size(array,1)*size(array,2) 
    if array(i)<=1000 
     array(i)=0; 
    end 
end 
array = nonzeros(array) 
関連する問題