алгоритм вычисления постоянства элемента массива - PullRequest
3 голосов
/ 19 февраля 2010

У меня большой массив 15х15х2200.Это просто набор разреженных матриц 15х15, изображающих связи между 15 узлами и их изменение в 2200 единиц времени.Мне нужно рассчитать, сколько времени сохраняется каждая ссылка.Под этим я подразумеваю, предположим, что A [4,11] равен 0 до единицы времени 5 и остается от 1 до единицы времени 20, а затем становится 0 и снова становится 1 от 42 до 46, я хотел бы получить массив этой информации вмассив, который хранит эти длины отдельно, как LEN = {... 15, 4, ....}

Я пытаюсь сделать это в Matlab, а затем создать гистограмму.Каков наилучший способ сделать это?

1 Ответ

4 голосов
/ 19 февраля 2010

Давайте попробуем сделать это без петель.

%# random adjacency matrix
array = randi([0 1], [15 15 2200]);

%# get the size of the array
[n1,n2,n3] = size(array);

%# reshape it so that it becomes n3 by n1*n2
array2d = reshape(array,[],n3)';

%# make sure that every run has a beginning and an end by padding 0's
array2d = [zeros(1,n1*n2);array2d;zeros(1,n1*n2)];

%# take the difference. +1 indicates a start, -1 indicates an end
arrayDiff = diff(array2d,1,1);
[startIdx,startCol] = find(arrayDiff==1);
[endIdx,endCol] = find(arrayDiff==-1);

%# since every sequence has a start and an end, and since find searches down the columns
%# every start is matched with the corresponding end. Simply take the difference
persistence = endIdx-startIdx; %# you may have to add 1, if 42 to 46 is 5, not 4

%# plot a histogram - make sure you play with the number of bins a bit
nBins = 20;
figure,hist(persistence,nBins)

Edit:

Чтобы увидеть еще одно визуальное представление о сохранности ваших треков, позвоните

figure,imshow(array2d)

Здесь показаны белые полосы, где у вас есть последовательность ссылок, и общие шаблоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...