Учитывая F, матрицу фракций nx2 ([num1, den1; num2, den2; ...]
), как эффективно вычислить фракцию, которая является результатом их добавления? (то есть [F(1,1)*F(2,2)*...*F(n,2) + F(1,2)*F(2,1)*F(2,3)*...*F(n,2) + ... , F(1,2)*...*F(n,2)]
). Результат не должен быть в неприводимой форме, точка - эффективность (значение векторизованное, а не код C).Эффективный способ выполнения рационального добавления в GNU Octave/Matlab
ответ
Вы можете использовать arrayfun
применить функцию к массиву, и prod
принимать продукт
p = prod(F(:,2));
G = arrayfun(@(x, y) x * p/y, F(:,1), F(:,2));
Тогда ваш ответ
[sum(G), p]
или вы можете сделать это в векторизованного, как Дивакар предложил в качестве
p = prod(F(:,2));
G = F(:,1).*(p./F(:,2));
[sum(G), p]
Я тестировал как на массиве 50x2 со 100 0 попыток и результаты были
Elapsed time is 0.594867 seconds.
Elapsed time is 0.012170 seconds.
Таким образом, векторизованный способ намного быстрее.
Или 'F (:, 1). * (Prod (F (:, 2), 1) ./ F (:, 2))' в векторном виде. – Divakar
@Divakar Этот новый пункт не имеет сущности, чтобы поднять новый вопрос, поэтому я даю ему попробовать: наличие индекса F в качестве матрицы mxk I, где F (I (:, j):) являются дробями для суммы для каждого столбца I. Как вычислить сумму всех групп т-фракций в векторном виде? [prodfrac (F (I (:, 1), :)), ..., prodfrac (F (I (:, k), :))] (где prodfrac - это решение, предложенное выше Sbte) – nightcod3r
Что-то вроде этого ? 'F1 = изменить форму (F (l, 1), размер (l, 1), размер (l, 2)); F2 = изменение формы (F (l, 2), размер (l, 1), размер (l, 2)); G = F1 ./ F2 * diag (prod (F2)); [sum (G) ', prod (F2)'] '. Обратите внимание, что 'diag' здесь, вероятно, медленный, поэтому вы можете использовать' spdiags' вместо этого. – Sbte
- 1. Эффективный способ добавления JMenuItems
- 2. Самый эффективный способ выполнения &&?
- 3. Самый эффективный способ добавления/удаления в jQuery
- 4. Эффективный способ добавления канонических тегов
- 5. Эффективный способ добавления объектов JS?
- 6. Методы добавления и умножения рационального класса
- 7. Эффективный способ добавления фактов в Datamart?
- 8. Эффективный способ добавления нулей в число строк?
- 9. Самый эффективный способ добавления метода в рубин?
- 10. Самый эффективный способ добавления массивов в C#?
- 11. Эффективный способ добавления данных в R
- 12. Самый эффективный способ добавления данных в экземпляр
- 13. Python - эффективный способ добавления строк в dataframe
- 14. Эффективный способ выполнения многих интерполяций
- 15. Эффективный способ выполнения тензорных продуктов в Фортране
- 16. Каков наиболее эффективный способ добавления метаданных schema.org
- 17. Эффективный способ добавления/удаления объектов [несколько атрибутов]
- 18. Более эффективный/эффективный способ добавления элементов и сортировки массива
- 19. Самый эффективный способ добавления в словарь в словаре
- 20. Самый эффективный способ добавления/удаления символа в начале строки?
- 21. Наиболее эффективный способ запуска выполнения API-вызовов
- 22. Эффективный способ выполнения различных строковых операций
- 23. Каков наиболее эффективный способ выполнения умножения?
- 24. эффективный способ выполнения дискретного анализа voronoi
- 25. SQL - Самый эффективный способ выполнения этого запроса?
- 26. эффективный способ выполнения интеграла по изображению
- 27. Каков наиболее эффективный способ выполнения этого кода?
- 28. Эффективный способ выполнения линейной регрессии качения
- 29. Более эффективный способ выполнения SQL-запросов
- 30. Более эффективный способ выполнения этого алгоритма поиска?
Для больших умножений ваш метод может превышать диапазон 2^52, что приведет к неточным результатам. Может ли использовать 'lcm' для получения меньших значений? – Daniel
Если 'F' является' nx2', не должно быть 'F (1,1) * F (2,2) * F (3,2) ... * F (n, 2) + F (2 , 1) * F (1,2) * F (3,2) ... * F (n, 2) + ... F (n, 1) * F (1,2) * F (2, 2) ... * F (n-1,2) 'вместо этого? – Divakar
@ Дивакар Абсолютно. Исправленный. – nightcod3r