Есть ли хорошо векторизованный способ взять произведение всех ненулевых элементов в каждом столбце разреженной матрицы в октаве (или в матрице) (возвращая строку -проектор продуктов)?Возьмите произведение всех ненулевых элементов в каждом столбце разреженной матрицы
2
A
ответ
4
Я бы объединить find
с accumarray
:
%# create a random sparse array
s = sprand(4,4,0.6);
%# find the nonzero values
[rowIdx,colIdx,values] = find(s);
%# calculate product
product = accumarray(colIdx,values,[],@prod)
Некоторые альтернативы (которые могут быть менее эффективными, вы можете их профиль)
%# simply set the zero-elements to 1, then apply prod
%# may lead to memory issues
s(s==0) = 1;
product = prod(s,1);
.
%# do "manual" accumarray
[rowIdx,colIdx,values] = find(s);
product = zeros(1,size(s,2));
uCols = unique(colIdx);
for col = uCols(:)'
product(col) = prod(values(colIdx==col));
end
0
Я нашел альтернативный подход к решению, но это может быть медленнее и не столь точны в худшем случае:
Просто возьмите журнал всех ненулевых элементов, а затем просуммировать столбцы , Затем возьмем exp полученного результирующего вектора:
function [r] = prodnz(m)
nzinds = find(m != 0);
vals = full(m(nzinds));
vals = log(vals);
m(nzinds) = vals;
s = full(sum(m));
r = exp(s);
endfunction
Смежные вопросы
- 1. Разрешить модификацию только ненулевых элементов разреженной матрицы
- 2. Умножение элементов столбца разреженной матрицы
- 3. Изменения ненулевых в некоторых столбцах разреженной матрицы
- 4. Продукт элементов из scipy разреженной матрицы
- 5. граф ненулевые элементы в каждом столбце матрицы
- 6. Извлечение элементов из разреженной матрицы
- 7. Оптимизированный способ замены ненулевых значений нулем в разреженной матрице на основе другой разреженной матрицы
- 8. Рисование случайного ненулевого элемента из разреженной матрицы
- 9. Среднее значение ненулевых значений в разреженной матрице?
- 10. Python: Участок разреженной матрицы
- 11. Последовательные элементы в строке разреженной матрицы
- 12. Tensordot для матрицы numpy и scipy разреженной матрицы
- 13. Как найти координаты ненулевых элементов трехмерной матрицы?
- 14. Попадая первого п ненулевых элементов Numpy матрицы
- 15. ind2sub для ненулевых элементов треугольной матрицы
- 16. R построения разреженной матрицы
- 17. Подсчет ненулевых значений в каждом столбце фрейма данных в python
- 18. Как определить среднее значение последнего, например, 100 ненулевых чисел в каждом столбце матрицы в matlab
- 19. Удалить минимальные значения в каждом столбце матрицы
- 20. Доступ и изменение ненулевых элементов разреженной матрицы класса arma :: sp_mat с использованием кода Rcpp
- 21. Найти значение ненулевых элементов
- 22. Среднее значение ненулевых элементов в 3d-массиве
- 23. Скалярное произведение матрицы, C++
- 24. Создание разреженной матрицы 100K * 100K (10 миллиардов элементов) в R
- 25. Looping над ненулевыми элементами разреженной матрицы uBlas
- 26. Разделение разреженной матрицы на минимальное количество компонентов
- 27. Обратные диагональные элементы из скудной разреженной матрицы
- 28. контрольное число уникальных значений в каждом столбце матрицы в искре
- 29. Найти первые N ненулевых элементов в каждой строке матрицы
- 30. Как преобразовать индекс ненулевых элементов матрицы в строку
Спасибо, я не знал о накопителе. Вы знаете, есть ли способ, который не связан с передачей функции? – dspyz
@dspyz: что вы имеете в виду с «передачей функции»? – Jonas
@dspyz Предполагая, что, когда вы говорите «избегать передачи функции», вы ссылаетесь на аргумент '@ prod' на' accumarray' - вот как 'tankarray' знает, какую функцию применить к массиву. Это типичный, предполагаемый синтаксис. Почему вы хотите избежать этого? – tmpearce