Это простой внешний продукт. kron не нужен (хотя он будет работать). bsxfun - это дикий перебор, хотя и даст то, о чем вы просили. repmat не подходит, потому что, хотя он поможет вам сделать то, что вы пожелаете, он реплицирует массивы в памяти, используя больше ресурсов, чем необходимо. (Избегайте использования неэффективных стилей программирования, когда в вашем распоряжении есть хорошие.)
Все, что вам нужно, это простой * оператор.
A - векторный ряд. B - вектор столбца.
C = B*A
даст результата C (I, J) = B (я) * А (к), что это именно то, что вы ищете. Обратите внимание, что это работает, потому что B - 3x1, а A - 1x4, поэтому «внутренние» размеры B и A соответствуют друг другу.
В MATLAB, ЕСЛИ вы не уверены, что-то работает, ПОПРОБУЙТЕ ЭТО!
A = [1 2 3 4];
B = [1;2;3];
C = B*A
ans =
1 2 3 4
2 4 6 8
3 6 9 12
Смотрите, что Крон сделал действительно работать, хотя я бы поставил, что использование Крон здесь, вероятно, менее эффективны, чем простой внешний продукт многократно.
C = kron(B,A)
C =
1 2 3 4
2 4 6 8
3 6 9 12
Как хорошо, bsxfun будет работать здесь, хотя, так как мы используем общий инструмент, чтобы сделать что-то, что основной оператор будет делать, я бы поставил это немного менее эффективно.
C = bsxfun(@times,B,A)
C =
1 2 3 4
2 4 6 8
3 6 9 12
НАИБОЛЬШИЙ выбор - repmat.Опять же, поскольку он искусственно реплицирует векторы в памяти FIRST, он должен выйти и захватить большие куски памяти в случае больших векторов.
C = repmat(B,1,4).*repmat(A,3,1)
C =
1 2 3 4
2 4 6 8
3 6 9 12
Я полагаю, что для полноты вы могли бы использовать meshgrid или ndgrid. Смотрите, что он делает именно то, что сделал repmat, но здесь он явно создает новые матрицы. Опять же, это плохой стиль программирования, когда есть хорошие инструменты для выполнения именно того, что вы хотите.
[BB,AA] = ndgrid(B,A)
BB =
1 1 1 1
2 2 2 2
3 3 3 3
AA =
1 2 3 4
1 2 3 4
1 2 3 4
C = BB.*AA
C =
1 2 3 4
2 4 6 8
3 6 9 12
Что именно вам нужно понять, именно поэтому каждый из этих инструментов МОЖЕТ использоваться для работы и почему они разные.
Вы пытались размножаться справа? B(). A() –