Я работаю в Matlab и у меня есть следующая проблема: У меня есть B
матрицу nx2
элементов, который содержит индексы для присвоения большой разреженной матрицы A
(почти 500,000x80,000). Для каждой строки B
первый столбец - это индекс столбца A
, который должен содержать 1, а второй столбец - индекс столбца A
, который должен содержать -1. Например:Matlab: Эффективное присвоение значений в разреженной матрице
B= 1 3
2 5
1 5
4 1
5 2
Для этого B матрицы, то соответствующая Матрицы должно быть таким:
A= 1 0 -1 0 0
0 1 0 0 -1
1 0 0 0 -1
-1 0 0 1 0
0 -1 0 0 1
Так, для строки i
из B
, соответствующей строки i
из A
должна быть полный нулей, кроме A(i,B(i,1))=1
и A(i,B(i,2))=-1
Это очень легко с петлей for
по всем строкам B, b Это очень медленно. Я также пробовал следующую формулировку:
A(:,B(:,1))=1
A(:,B(:,2))=-1
Но Matlab дал мне ошибку «Ошибка в памяти». Если кто-нибудь знает более эффективный способ достичь этого, пожалуйста, дайте мне знать.
Заранее благодарен!
Ваш код заполняет целые столбцы с 1 или -1. Вот почему у вас заканчивается память (и результат не будет тем, что вы хотите в любом случае) –