2014-12-27 3 views
-1

Итак, я работаю с разреженной матрицей, и мне нужно узнать различную информацию о очень большом (размер 10^6), и мне нужно узнать среднее значение исходящих ссылок. Просто, чтобы быть уверенным, что я имею в виду то, что вы получаете от 3 + 4 + 5/3 = 4, 4 - это среднее значение.Средство ссылок на разреженную матрицу

Я думал, что-то вроде этого:

[row,col] = find(A(:,2),1,'first') 

, а затем я хотел бы сделать 1/numberInThatIndex или что-то подобное, так как это S-матрица (уверен, что это называется, что).

И я буду перебирать столбцы по столбцам, но по какой-то причине он не дает мне первое число в каждом столбце, если я нахожу (A (:, 1), 1, 'first'), это дает мне первый в первом столбце, но не во втором, если я изменю его на A (:, 2).

Мне также нужно что-то, чтобы сохранить этот индекс, чтобы получить доступ к значению, я подумал о векторе 2xN, но я думаю, что это не лучшая идея. Я имею в виду, что поиск будет давать мне индекс, но мне нужно значение в этом индексе, а затем сохранить это или показать его. Не уверен, что я объясняю себя правильно, но я пытаюсь, извините.

Просто, чтобы быть понятным как при вводе A (:, 1), так и A (:, 2), он дает мне индекс из первого столбца, и я не хочу этого, я хочу, чтобы первый элемент был найден из каждого столбца, поэтому я могу вычислить среднее из числа в этом индексе.

редактирование: все кажется, что это действительно работает, но когда я проверял результаты, я помещал 3817 вместо 3871, который был данным ответом, и поэтому я нашел 0, когда мне захотелось чего-то, что не является нулем. Не уверен, что я должен удалить все это.

+0

Что вы подразумеваете под * outlink *? Вы хотите вычислить средства для каждого столбца? – knedlsepp

+1

Я не понимаю ваш вопрос. Если вы не нашли решение, попробуйте объяснить, что вы пытаетесь реализовать, используя небольшой пример и какой результат вы ожидаете. – Daniel

+0

Outlink - это имя, присвоенное значению определенного индекса в матрице. Так как он в основном заполнен 0, если A (652,1) не равен нулю, это означает, что на странице «каждая страница» ссылается страница, на которую ссылается эта страница. Поэтому, если столбец 1 имеет 5 исходящих линий, каждый из них имеет значение 0,2, поэтому это означает, что он указывает на 5 других страниц. Это не среднее значение для каждого столбца, а среднее ... всех столбцов, которые я предполагаю. Но не сумма каждого столбца, так как я знаю, дает мне значение 1 (оно имеет 5 значений 0,2, все суммированные дают 1,0) – keont

ответ

1

Чтобы решить вашу проблему, вы можете сделать следующее:

numberNonZerosPerColumn = sum(S~=0,1); 
meanValue = nanmean(1./numberNonZerosPerColumn); 
  • Подсчитайте число ненулевых элементов в каждом столбце n(i)
  • Compute значение v(i), которые хранятся там, которые определяются v(i) := 1/n(i)
  • Возьмите среднее значение тех значений, где n(i) не равно нулю (т.е. суммируя все эти значения, где v(i) не является NaN и разделить на число столбцов, которые содержат по крайней мере один нуль)

Если вы хотите, чтобы рассматривать столбцы без любого ненулевого входа в v(i):= 0, но по-прежнему использовать их в среднем, вы можете использовать:

numberNonZerosPerColumn = sum(S~=0,1); 
meanValue = nansum(1./numberNonZerosPerColumn)/size(S,2); 
+0

@keont: Это решило вашу проблему? – knedlsepp

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