ゼロと非ゼロが表示されるのは、ループ内に配列を配置する方法です。コードを読み取った場合、CSVファイル内の位置i
の値(これは行または列ベクトルであると仮定しています)が0でなければ、ベクトルx
の位置i
が変更されます。そうでなければ、ベクトルs
の位置i
が変更されます。ベクトルx
を事前に割り当てるわけではないので、ベクトルx
は、配列の長さよりも大きな位置を指定して、最終的に値を格納する希望の位置までゼロによって入力されます。
お守り:あなたが見ることができるようにx
事前に割り当てないことによって、
>> clear x;
>> x(4) = 3
x =
0 0 0 3
>> x(7) = 10
x =
0 0 0 3 0 0 10
をし、前の最後の要素の間にあるすべての位置、そこに値を配置する最初以外の位置を指定して、ご希望positionにはゼロが設定されます。したがって、0に等しくない値を持つループ内のポイントに到達すると、このゼロ拡張が発生しています。私はあなたのポストについて読んだ何が正しい場合
は、あなたがフィルタアウトにしたい。これは、単純な論理的インデックスで行うことができます0に等しくないCSVファイルの値:
x = datafile(datafile ~= 0);
これはベクトルx
をすべてゼロ値で削除します。最後に、s
ベクトルを作成することができます。このベクトルは、ベクトルのゼロの合計数と同じ長さのゼロのベクトルだけです。あなたが何らかの形で死んセットは、ループを使用している場合は
s = zeros(1, nnz(datafile == 0));
、代わりに連結値を考慮してください。
clear all;close all;clc;
datafile = csvread('data20us.csv');
datafile = datafile(3:length(datafile));
% New - Make x empty
x = [];
% New - Make s empty
s = [];
for i=1:length(datafile)
if (datafile(i) ~= 0)
% x must stock values different from 0
% New - concatenate
x = [x datafile(i)];
else
% s must stock the rest of the values
% New - concatenate
s = [s datafile(i)];
end
end