Добрый день. Есть разреженная матрица H размером NxM. Я пробегаю по столбцам и если элемент в столбце равен единице, я запоминаю его позицию. Жестко задать я знаю как, но дело в том, что матрица H размером 2700x5400. Как можно задать индексы матрицам? То есть в последствии я хочу обращаться например EE(2,3), это будет означать что я обращаюсь к E2(3).
for i=1:N
if H(i,1)==1
E1=[E1 i];
end
end
for i=1:N
if H(i,2)==1
E2=[E2 i];
end
end
EE=[E1
E2];
Подскажите, пожалуйста, как можно задать цикл?
Индексация матриц
Модератор: Admin
-
- Пользователь
- Сообщения: 4
- Зарегистрирован: Сб июн 10, 2017 6:45 pm
Re: Индексация матриц
Я не понял, что вы хотите сделать. Найти позиции всех единичных (или просто всех ненулевых?) элементов? Так это вам функция find сделает без всяких циклов.
С уважением
Александр Сергиенко
Александр Сергиенко
-
- Пользователь
- Сообщения: 4
- Зарегистрирован: Сб июн 10, 2017 6:45 pm
Re: Индексация матриц
sandy писал(а):Я не понял, что вы хотите сделать. Найти позиции всех единичных (или просто всех ненулевых?) элементов? Так это вам функция find сделает без всяких циклов.
Мне необходимо задать два множества
M(l)={m: h(m,l)=1} - множество позиций ненулевых элементов в l-м столбце
и E(m)={l:h(m,l)=1} - множество позиций ненулевых элементов в m-й строке
То есть если есть матрица
H=[ 0 0 1 0 0
1 0 0 0 1
0 0 0 1 0 ]
то M(1)={2}, M(2)-пустое M(3)={1} M(4)={3} М(5)={2}
Е(1)={3} Е(2)={1, 5} E(3)={4}
я не понимаю как из того, что выводит find мне создать данные множества
Re: Индексация матриц
Например так:
В результате выполнения этого кода получаются массивы ячеек (cell array) M и E, в которых лежат нужные множества:
Код: Выделить всё
M = cell(1, size(H,2));
for k = 1:size(H,2)
M{k} = find(H(:,k));
end
E = cell(size(H,1), 1);
for k = 1:size(H,1)
E{k} = find(H(k,:));
end
В результате выполнения этого кода получаются массивы ячеек (cell array) M и E, в которых лежат нужные множества:
Код: Выделить всё
M
M =
[2] [0x1 double] [1] [3] [2]
>> E
E =
[ 3]
[1x2 double]
[ 4]
С уважением
Александр Сергиенко
Александр Сергиенко
-
- Пользователь
- Сообщения: 4
- Зарегистрирован: Сб июн 10, 2017 6:45 pm
Re: Индексация матриц
Спасибо! Я только начал программировать, не со всем разобрался.
-
- Пользователь
- Сообщения: 4
- Зарегистрирован: Сб июн 10, 2017 6:45 pm
Re: Индексация матриц
Подскажите, пожалуйста, а как теперь обращаться к конкретному элементу полученного массива? Например, к {5} в Е(2)={1, 5}?
Re: Индексация матриц
Обратите внимание на то, что первая пара скобок - фигурные (номер ячейки), а вторая - круглые (номер элемента в массиве, являющемся содержанием ячейки).
Код: Выделить всё
E{2}(2)
ans =
5
С уважением
Александр Сергиенко
Александр Сергиенко