Матрицы извлечения и присвоения чисел или символов - PullRequest
0 голосов
/ 01 ноября 2010

У меня огромные матрицы данных, хранящиеся в M-файле MATLAB, и я объясню

моя проблема в этом примере:

У меня есть три постоянные матрицы (каждая матрица имеет свои значения, и эти

значения не изменены, это значения для результатов эксперимента)

Каждая матрица всегда имеет 4 строки и 6 столбцов

Последний столбец 1-й матрицы - это нулевой столбец

2-я матрица не имеет нулевого столбца

Последние 2 столбца 3-й матрицы - это нули

На самом деле у меня есть другие матрицы, но выше приведены только образцы, что означает

что следующие три матрицы в моих данных не обязательно должны быть в той же последовательности, что и

выше трех матриц в случае наличия или отсутствия нулевых столбцов. Еще один момент

ненулевые столбцы всегда находятся в последних трех, двух или одном столбце или нет

ноль столбца.

Итак, из приведенных выше матриц мне нужно назначить три буквы x, y и z ИЛИ

цифры 5, 6 и 7 только для ненулевых столбцов, начиная с 1-го столбца

матрица 1 продолжается до последнего столбца последней матрицы, исключая нулевые столбцы

означает, что: приведенный выше пример будет:

1-я матрица:

Колонка 1: 5

Колонка 2: 6

Колонка 3: 7

Колонка 4: 5

Колонка 5: 6

Столбец 6: исключен и не пронумерован, поскольку это нулевой столбец

Тогда он не сбрасывает счет, но постоянно помечает и переходит на

следующая матрица, так:

2-я матрица

Колонка 1: 7

Колонка 1: 5

.

.

.

.

И так далее до последней матрицы.

Я использую следующую команду, которая появляется в окне Matlab:

K = input ('Введите номер матрицы: 1 OR 2 OR 3')

Затем, после ввода номера матрицы, программа запрашивает у пользователя

введите номер столбца:

M = input ('Введите номер столбца 1 ИЛИ 2 ИЛИ 3 ИЛИ 4 ИЛИ 5 ИЛИ 6')

Тогда результатом будет матрица из двух столбцов:

1-й столбец: элементы столбца для введенного числа

2-й столбец: этому столбцу присвоен номер 5 ИЛИ 6 ИЛИ 7, и наверняка это

повторяется через колонку.

Извините за этот длинный вопрос, а также я постарался обобщить и сделать его максимально простым.

Я ценю любую помощь и спасибо.


Могу ли я задать вопрос, продолжая вышеуказанный вопрос?

Если кто-то хочет представить числа в тексте, возможно ли это?

это означает, например:

5: зеленый

6: синий

7: красный

и затем продолжите, как указано выше, анализ. Только заменив числа этими словами

итак, во втором столбце будут слова, отличные от цифр.

Извините, что поставил вопрос в поле для ответов, но я не смог прокомментировать

на этот вопрос ..

1 Ответ

2 голосов
/ 01 ноября 2010

Я надеюсь, что вы храните все свои матрицы в одной переменной.Это позволит вам не повторять одни и те же команды для разных матриц или использовать eval.

Допустим, у вас есть 3 матрицы:

% sample data
A1 = horzcat(rand(4,5),zeros(4,1));
A2 = rand(4,6);
A3 = horzcat(rand(4,4),zeros(4,2));

Вы можете объединить их как массив ячеек:

A = {A1,A2,A3};

или трехмерный массив (поскольку все матрицы имеют одинаковый размер):

A = cat(3,A1,A2,A3);

Создание комбинированной матрицы B с 4 строками и (6 + 6 + 6) столбцами

% combined matrix for cell array
B = cell2mat(A);

% or for 3D array
B = reshape(A,4,[]);

Затем вы можете использовать следующий код для повторного заполнения B 5 и 7:

% repopulate B with 5, 6, 7
zerocolumns = all(B==0,1); % index of columns with all zeros
vec567 = repmat(5:7,1,ceil(sum(~zerocolumns)/3)); % vector 5 6 7 5 6 7 ...
B(:,~zerocolumns) = repmat(vec567(1:sum(~zerocolumns)),size(B,1),1);

Разделить B обратно на исходные матрицы:

% convert back to cell array
C = mat2cell(B,[],4, [6 6 6]);

% convert back to 3D array
C = reshape(B,4,6,[]);

Наконец выможно получить 2-колоночный вывод как

% cell arrays
result = [A{K}(:,M) C{K}(:,M)];

% 3D arrays
result = [A(:,M,K) C(:,M,K)];

Если вам не нужно повторно заполнять исходные матрицы, вы можете получить результат раньше:

% cell arrays
result = [A{K}(:,M) B(:,(K-1)*6+M)];

% 3D arrays
result = [A(:,M,K) B(:,(K-1)*6+M)];

Надеюсь, я не ошибсягде-то.

Вероятно, это можно решить без создания комбинированной матрицы.Но у вас небольшие матрицы, и не должно быть проблем с памятью или производительностью.

...