# How can I convert indices into a binary matrix?

7 Ansichten (letzte 30 Tage)
MByk am 18 Feb. 2024
Kommentiert: Alexander am 18 Feb. 2024
Hello all, I have a txt file that includes list of selected items (there are 10 items in total). I am reading the file using "readmatrix". I want to create a binary (logical) matrix as in the example below but I am getting "The subscript vectors must all be of the same size." message. How can I fix it? Thanks for the help.
1,3,5 -> 1,0,1,0,1,0,0,0,0,0
1,2,3,7 -> 1,1,1,0,0,0,1,0,0,0
1,2,6,7,8 -> 1,1,0,0,0,1,1,1,0,0
1,2,3 -> 1,1,1,0,0,0,0,0,0,0
...
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
Stephen23 am 18 Feb. 2024
@MByk: please upload a sample data file by clicking the paperclip button.

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Dyuman Joshi am 18 Feb. 2024
Bearbeitet: Dyuman Joshi am 18 Feb. 2024
ItemSet = 31×7
1 5 9 10 NaN NaN NaN 1 5 9 10 NaN NaN NaN 1 5 8 9 10 NaN NaN 1 5 7 9 10 NaN NaN 3 5 9 10 NaN NaN NaN 3 5 8 9 10 NaN NaN 3 5 7 9 10 NaN NaN 3 4 5 9 10 NaN NaN 3 4 5 8 9 10 NaN 3 4 5 7 9 10 NaN
tic
s = size(ItemSet);
%corresponding row values
row = repelem((1:s(1)).', 1, s(2))
row = 31×7
1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 9 9 9 9 9 10 10 10 10 10 10 10
%maximum value
m = max(ItemSet, [], 'all');
%subscript values
idx = [row(:) ItemSet(:)];
%check for NaN values
k = isnan(idx(:,2));
out = accumarray(idx(~k,:), 1, [s(1) m])
out = 31×10
1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 0 1 1
toc
Elapsed time is 0.010489 seconds.
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
MByk am 18 Feb. 2024
Thank you Dyuman Joshi.

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (1)

Alexander am 18 Feb. 2024
Maybe something like the following?
fid = fopen('Item.txt');
A = [];
while(~feof(fid))
syLine = fgetl(fid);
dyA = zeros(1,10);
syLine = ['[' syLine ']'];
dyLine = eval(syLine);
dyA(dyLine) = 1;
A = [A; dyA];
end
A
fclose(fid)
##### 3 Kommentare1 älteren Kommentar anzeigen1 älteren Kommentar ausblenden
MByk am 18 Feb. 2024
Thank you Alexander and Stephen23.
Alexander am 18 Feb. 2024
Thanks @Stephen23

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Google Earth finden Sie in Help Center und File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!

Translated by