Код ниже расскажет вам, сколько мест имеют повторяющиеся векторы z-данных.Идея состоит в том, чтобы reshape
передать ваши данные в двухмерную матрицу, где каждая строка представляет один столбец z-данных из исходной матрицы.Измененная матрица будет иметь Xcoordinate*Ycoordinate
строки и Zdata
столбцы.Затем вы можете использовать функцию unique
, чтобы получить уникальные строки этой измененной матрицы, которые по существу удаляют любые дублирующиеся векторы z-данных.
Вы также можете заменить вложенный цикл в вашемкод со следующей строкой для прямого генерирования трехмерной случайной матрицы:
my3Darray = uint8(rand(Ycoordinate, Xcoordinate, Zdata)*64);
Если вы хотите сохранить логические данные, используйте logical
массивы в MATLAB.
Редактировать: Следуйте приведенным выше комментариям, чтобы уменьшить объем памяти.
Вот код:
clear
clc
Ycoordinate = 4000;
Xcoordinate = 4000;
Zdata = 63;
my3Darray = uint8(rand(Ycoordinate,Xcoordinate,Zdata)*64);
%reshape data so that each z-column becomes a row
A = reshape(my3Darray,Ycoordinate*Xcoordinate,Zdata);
[A_unique, I, J] = unique(A,'rows'); %get the unique rows of A
duplicate_count = size(A,1) - size(A_unique,1)