Borrar filtros
Borrar filtros

Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

Creating a matrix of 1's and 0s after comparing strings

1 visualización (últimos 30 días)
Kane
Kane el 24 de Mayo de 2014
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
Hi all,
Ive been having some trouble with my code for some months now. I have several very large files that need to have strings compared, and if theres a match, put a 1 in a box, if false, put a 0 in a box.
My matrices are very large; some are as big as 200 rows by 200000 columns, each needing the check to be made. So far, my experience (and probably wrong programming) have made this an extremely long proecss with the code I have, as it seems to check every single cell with every iteration through my for loops. Im no programmer though, and I only got this code after trying many different things.
Any advice on how to optimise/rejig this would be of huge help, as as it is, its taking far too long to go through each, sometimes literally weeks. Here is an example of each strings being compared, where my code goes through the first 28 chars of the longer string to see if theres a match:
'TCGA-A6-2670-01A-02W-0831-10'
'TCGA-AA-A01Q-01A-01W-A005-10_AAAS_8086_12_53702089_-_C'
Here's the code I use:
[no_patients, no_mutations] = size(matrix);
for row_index = 2:no_patients
for column_index = 2:no_mutations
matrix{row_index,column_index} = strncmp(matrix{row_index,1},matrix{1,column_index},28)
end
end
thanks

Respuestas (1)

the cyclist
the cyclist el 24 de Mayo de 2014
Editada: the cyclist el 24 de Mayo de 2014
Here is a miniature version, where I just checked the first 2 characters (N=2) of a fixed string against a cell array. Does this do what you want?
s = 'AB';
matrix = {'ABA','ABB';
'ACA','ACC'}
N = 2;
tf = cellfun(@(x)strncmp(x,s,N),matrix);
I also wrote the result to a separate logical array, rather than storing in-place.
  2 comentarios
Kane
Kane el 24 de Mayo de 2014
I dont quite understand this im afraid or how I get it to work with my code!
cheers
the cyclist
the cyclist el 24 de Mayo de 2014
Sorry. I think I misread your code. Can I just clarify? Are you checking ALL of the elements in Row 1 of your matrix and ALL of the elements in Column 1 of your matrix?
So, if matrix(16,1) matches matrix(1,283), then you want to put a 1 into element (16,283)?

La pregunta está cerrada.

Community Treasure Hunt

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

Start Hunting!

Translated by