필터 지우기
필터 지우기

How to construct a 3D matrix from a 2D matrix

조회 수: 3 (최근 30일)
Enrico Scupola
Enrico Scupola 2018년 5월 20일
편집: dpb 2018년 5월 21일
Hi all, I am struggling to find a solution to this problem. I am not very skilled with 3D matrices and my MATLAB coding skills are worse than I thought. So the problem is as follow. I have a 5-column matrix made of patent number, application year, category (ranging from 1 to 6), subcategory (ranging from 1 to 36) and assignee number. So for each assignee number I have many patents denoted by the patent number. Now I want to construct a 3D matrix out of the matrix I just described having the years on the rows or first dimension, the subcategory on columns or second dimension and the assignee number on pages or third dimension. In each cell I would like to have the amount of patents a company has. In other words, the sum of rows per each assignee number.
I am stuck at the very beginning and I don't know where to begin the loop.
Many thanks.
  댓글 수: 5
Paolo
Paolo 2018년 5월 21일
편집: Paolo 2018년 5월 21일
In the file you provided, Bsample has six columns rather than five. Is the second column also used for assignee number or are there five columns for company codes?
dpb
dpb 2018년 5월 21일
편집: dpb 2018년 5월 21일
OK, got it...Firstly, I'd convert to categorical(*) variables instead of strings; will be much easier to do lookups and comparisons that way as well as be less memory-intensive if the tables are large as indicate; before go too far, what's with the minus signs at the beginning of B array first column for assignee--that have some significance?
I've not had time to actually do more than look a little, sorry, but I'm thinking probably using tables and grouping variables will let you do the lookups you're after rather than building this alternate array (esentially it is the array, but would be in table form and use grouping variables to do the construction behind the scenes).
The first step along my idea would be something like-
A=table(categorical(Asample(:,1)),categorical(Asample(:,2)),'VariableNames',{'Company','CompCode'});
B=table(categorical(Bsample(:,1)),categorical(Bsample(:,2:end)),'VariableNames',{'Assignee','CompCode'});
C=table(categorical(Csample(:,1)),categorical(Csample(:,2)),categorical(Csample(:,3)),categorical(Csample(:,4)),'VariableNames',{'Patent','Year','Subcategory','Assignee'});
Example to see where we start from--
>> C(1:10,:)
ans =
10×4 table
Patent Year Subcategory Assignee
_______ ____ ___________ ________
3930271 1974 6 63
3930272 1974 6 65
3930273 1975 6 65
3930273 1975 6 65
3930276 1972 6 69
3930277 1974 6 69
3930280 1974 6 69
3930280 1974 6 69
3930281 1974 6 69
3930282 1974 6 61
>>
The above raises another question--why are there duplicated rows in C? 3930273 is there twice with identically same data for all fields...
(*) Or, if the codes are and always will be all numeric, could use integer.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by