2013-03-14 3 views
2

Предположим, у меня есть разреженная матрица Sparstica, которая является вертикальной конкатенацией нескольких других разреженных матриц. Когда я набираю Sparstica(:), я получаю список ненулевых элементов. В левом столбце будет указатель элемента, в правом столбце будет ненулевой элемент.Манипулирование разреженными матрицами в Matlab

Как я могу манипулировать i-ым и j-ым ненулевым элементом каждой другой разреженной матричной матрицы в середине n-2 блоков()?


приложена: Для того, чтобы уточнить, что я имею в виду г-го и j-го элемента любой другой разреженной матрицы, предположим, что у меня есть

Sparstica = [A_1; А_2; A_3; ...; A_n]

Это было создано от vertcat. Теперь мне нужно взять i-й и j-й, скажем, 3-й и 5-й ненулевой элемент каждый другой разреженная матрица от A_2 до A_{N-1} (Я знаю, что обозначение для этого на самом деле не разрешено, а только для демонстрационных цели). Я бы хотел сделать это без, используя, если возможно, петли.

+0

Насколько велика 'n' в вашем дело? И вы проверили, что использование 'for'-loops определенно слишком медленное? –

+0

http://www.mathworks.com/help/matlab/math/accessing-sparse-matrices.html#f6-9348 ctrl + f "усугубляет неэффективность". Для моих целей 'n' может достигать 2^15 или около того. Я забываю, что верхний предел в том, что Matlab может обрабатывать на моей машине. – AlanH

ответ

4

Вы можете найти ненулевые элементы, используя find:

>> A = speye(3) 

A = 

    (1,1)  1 
    (2,2)  1 
    (3,3)  1 

>> I = find(A ~= 0) 

I = 

    1 
    5 
    9 

Если вам нужны индексы в формате строки/столбца, используйте ind2sub:

>> [X, Y] = ind2sub(size(A), I) 

X = 

    1 
    2 
    3 

Y = 

    1 
    2 
    3 
+0

Знаете ли вы, как я могу манипулировать одним и тем же i-м и j-м элементами любой другой разреженной матрицы без использования цикла for? – AlanH

+0

Можете ли вы уточнить, что вы имеете в виду под «тем же самым i-м и j-м элементом любой другой разреженной матрицы»? –

+0

Конечно, см. Сообщение. – AlanH

Смежные вопросы