В MATLAB я хотел бы применить функцию к каждой паре векторов столбцов в матрицах A
и B
. Я знаю, что должен быть эффективный (не for
) способ сделать это, но я не могу понять это. Функция выведет скаляр.Применить функцию к каждой паре столбцов в двух матрицах в MATLAB
ответ
Попробуйте
na = size(A,1);
nb = size(B,1);
newvector = bsxfun(@(j,k)(func(A(j,:),B(k,:))),1:na,(1:nb)');
bsxfun
выполняет одноплодное расширение на 1: на и (1: пь). Конечным результатом в этом случае является то, что func будет применяться к каждой паре векторов столбцов, взятых из A и B.
Обратите внимание, что bsxfun может быть сложным: может потребоваться, чтобы прикладная функция поддерживала одноэлементное расширение. В этом случае он будет работать, чтобы выполнить нужную работу.
Вы имеете в виду попарно? Таким образом, во время цикла функция будет работать как scalar_val = func(A(i),B(i))
?
Если A
и B
имеют одинаковый размер, то вы можете применить ARRAYFUN функции:
newvector = arrayfun(@(x) func(A(x),B(x)), 1:numel(A));
UPDATE:
Согласно Вашему комментарию, Вы должны выполнить все комбинации А и В, как scalar_val = func(A(i), B(j))
. Это немного сложнее, и для больших векторов можно быстро заполнить память.
Если функция является одним из стандартных вы можете попробовать использовать BSXFUN:
out = bsxfun(@plus, A, B');
Другой способ заключается в использовании MESHGRID и ARRAYFUN:
[Am, Bm] = meshgrid(A,B);
out = arrayfun(@(x) func(Am(x),Bm(x)), 1:numel(Am));
out = reshape(out, numel(A), numel(B));
Я считаю, что он должен работать, но я не» У меня есть время, чтобы проверить его сейчас.
В цикле for это должно быть 'scalar_val = func (A (i), B (j))' – srubin
- 1. применить функцию к каждой паре строк массива
- 2. Применить функцию к каждой подматрице в Matlab
- 3. Pandas: Применить функцию по каждой паре столбцов под ограничениями
- 4. Применить функцию к каждой паре ячеек в массиве ячеек
- 5. Применить функцию к каждой подэлементе ячейки в Matlab?
- 6. Применить функцию к каждой ячейке в Excel
- 7. Применить функцию к каждой строке python
- 8. Matlab - соседние кластеры (в двух разных матрицах)
- 9. Применить функцию к каждой ячейке в DataFrame
- 10. Применить функцию к каждой строке в Torch
- 11. Matlab: Применить функцию к вектору
- 12. Применить функцию к каждой строке data.frame и сохранить классы столбцов
- 13. Применить функцию к многоуровневым столбцов
- 14. Как применить функцию к матрице в MATLAB?
- 15. Применить функцию к нескольким массивам в Matlab
- 16. Как применить функцию к каждой строке data.table
- 17. jQuery - Как применить функцию к каждой таблице?
- 18. Применить функцию к каждой строке матрицы
- 19. Применить функцию для всех пар столбцов двух матриц в R
- 20. R Datatable, применить функцию к подмножеству столбцов
- 21. Применить функцию для каждой пары столбцов в R
- 22. Применение пересечения для каждой строки в разных матрицах в MATLAB
- 23. применить функцию к каждой комбинации строк R
- 24. Применить функцию к каждой ячейке по нескольким dataframes в R
- 25. г - применить функцию к каждой строке data.table
- 26. Применить функцию к каждой строке Spark DataFrame
- 27. применить функцию по группам столбцов
- 28. Мышление в матрицах в Matlab
- 29. Как применить функцию к векторам внутри матрицы в MATLAB?
- 30. применить функцию столбцов к списку r
Я пробовал то же самое, когда мой func является точечным продуктом, но он дал мне ошибку, поскольку аргументы точки должны быть одинаковыми размер ... Любые идеи, что происходит не так? – Bob
@Bob возможно, что вам нужно вызвать по столбцу, а не по строке: 'bsxfun (@ (j, k) func (A (:, j), A (:, k)), 1: na, (1 : nb) ') 'работает? – Shai