ここで言ったようにデータ表現が必要な場合:
2000 0 0.4 0.2 0.4
2001 0.3 0 0.2 0.5
あなたがすることは次のとおりです。あなたが示し、名前を付けたような行と列の表現を持つデータマトリックス表現があるとしますoldRepresentation
(つまり、行は観察であり、列は会社、年の場所、市場シェアです)。会社ごとに 1 つの新しい表現があり、一意の年ごとに三日月の順序で 1 つの行があり、場所の 1 つの列があります。スパース表現である場合とそうでない場合があります。ここで示したケースではなく、マトリックスがスパースである場合にのみスパース表現を使用します。
これは表現を変更するためのスクリプトですが、スタックオーバーフローはこの方法では機能しないことに注意してください。自分でコーディングし、コーディングの問題と行き詰まっている場所を私たちに提出する必要があります。あなたは初心者だとおっしゃっていたので、matlab 構文を使用して学習するためのアイデアを次に示します。必要なユークリッド距離として、それを使用して他のポイントをワークアウトします。質問はできるだけ一般的なものにするようにしてください。
oldRepresentation = [...
...% Firm Year Location Market_share
1 2000 1 0.1;...
1 2000 2 0.2;...
1 2000 3 0.5;...
1 2000 4 0.2;...
1 2001 1 0.3;...
1 2001 2 0.0;...
1 2001 3 0.2;...
1 2001 4 0.5;...
2 2000 1 0.0;...
2 2000 2 0.4;...
2 2000 3 0.2;...
2 2000 4 0.4;...
2 2001 1 0.1;...
2 2001 2 0.5;...
2 2001 3 0.3;...
1 2001 4 0.1];
% Firm information (if you know these information a priori, you can
% set them directly):
firmsNumbers = unique(oldRepresentation(:,1))'; % Get unique firm
% numbers (suppose you have a firma that doesnt have a representation,
% in this case you will jump it.
nFirms = numel(firmsNumbers); % Total number of firms
% Year information:
years = unique(oldRepresentation(:,2))'; % Get unique years
nYears = numel(years); % Total number of years:
% Location information:
location = unique(oldRepresentation(:,3))'; % Unique locations
nLocations = max(oldRepresentation(:,3)); % Total number of locations
newRepresentation = cell(1,nFirms); % Pre allocate holder for the new
% representation, one cell for each firma, sparse representation.
nonSparse = cell(1,nFirms); % Pre allocate holder for the new
% representation, one cell for each firma, non sparse representation.
for curFirm=firmsNumbers % Loop on the firms
firmLines=(oldRepresentation(:,1)==curFirm); % get lines which the
% firm appears
yearsOfOperation=oldRepresentation(firmLines,2); % get current firm
% operation years
% Transform the years to line indexes:
[~,lineIdx] = ismember(yearsOfOperation,years);
firmLocations=oldRepresentation(firmLines,3); % get current firm
% operation locations
newRepresentation{curFirm} = sparse(nYears,nLocations); % One line
% for each year, one column for each location (sparse matrix
% allocation).
nonSparse{curFirm} = zeros(nYears,nLocations);
marketShares=oldRepresentation(firmLines,4);
% Now we fill this firm market share:
for k=1:numel(yearsOfOperation)
newRepresentation{curFirm}(lineIdx(k),firmLocations(k)) = ...
marketShares(k);
nonSparse{curFirm}(lineIdx(k),firmLocations(k)) = ...
marketShares(k);
end
end
結果の非スパース表現:
>> nonSparse{1} % First firma, first line is the 2000 year, each column a location from 1 to 4.
ans =
0.1000 0.2000 0.5000 0.2000
0.3000 0 0.2000 0.1000
>> nonSparse{2} % Second firma
ans =
0 0.4000 0.2000 0.4000
0.1000 0.5000 0.3000 0
スパース表現:
>> newRepresentation{1} % First firm
ans =
(1,1) 0.1000
(2,1) 0.3000
(1,2) 0.2000
(1,3) 0.5000
(2,3) 0.2000
(1,4) 0.2000
(2,4) 0.1000
>> newRepresentation{2} % Second firm
ans =
(2,1) 0.1000
(1,2) 0.4000
(2,2) 0.5000
(1,3) 0.2000
(2,3) 0.3000
(1,4) 0.4000