有没有办法在MATLAB中组合2个向量,以便:

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

使用类似于的正常MATLAB语法:

mat = C * S(1:length(S))

这给出了“内部矩阵尺寸必须一致的误差”。因为它试图进行正常的矩阵运算。这不是一个标准的线性代数运算,所以我不确定如何在MATLAB中正确表达它,但似乎应该可以在不需要循环的情况下实现,这在MATLAB中过于缓慢。

有帮助吗?

解决方案

从您的描述中,它听起来像一个简单的矩阵操作。您只需确保 C S 的尺寸合适。 C 应为列向量(长度(C) -by-1), S 应为行向量(1-by- <强>长度(S))。假设它们是正确的尺寸,请执行以下操作:

mat = C*S;

如果你不确定它们的尺寸,这应该有效:

mat = (C(:))*(S(:)');

编辑:实际上,我对括号感到有点疯狂。其中一些是不必要的,因为没有操作顺序问题。这是一个更清洁的版本:

mat = C(:)*S(:)';

<强>说明

MATLAB中的矩阵乘法运算符将生成内部产品(产生标量值)或外部产品(产生矩阵),具体取决于应用矢量的尺寸。

由于使用冒号运算符重塑矢量参数的维度。语法 C(:) C 的内容重塑为单个列向量。语法 S(:)' S 的内容重新整形为列向量,然后将其转换为行向量。当相乘时,会产生一个大小矩阵(长度(C) -by- 长度(S))。

注意:冒号运算符的使用适用于任何维度的向量和矩阵,允许您将其内容重新整形为单个列向量(这使得某些操作更容易,如< a href =“https://stackoverflow.com/questions/709872/multi-dimension-any”>这个另外的问题)。

其他提示

尝试在MATLAB中执行:

mat = C*S'

如同:

C = [1; 2; 3];
S = [2; 2; 9; 1];

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

% Equivalent code:
mat2 = C*S';

myDiff = mat - mat2

你的意思是以下几点吗?

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

如果是这样,它只是矩阵乘法:

C' * S    % if C and S are row vectors
C * S'    % if C and S are column vectors

如果您不知道 C S 是行向量还是列向量,您可以使用技巧将它们转换为列向量,然后转置 S :

C(:) * S(:)'

我不清楚你在做什么 - 看起来你的结果矩阵将由 length(C)行组成,其中 i 行是由 C i 条目缩放的向量 S (因为下标向量给出标量)。在这种情况下,您可以执行类似

的操作
mat = repmat(C,[1 length(S)]) .* repmat(S, [length(C) 1])

您可以在列之间平铺 C ,然后在 S 中向下排列。

试试这个:

C = 1:3 S = 1:5 mat1 = C'* S

mat2 = bsxfun(@times,C',S)

(特别是当你需要的功能不是简单的MATLAB表示法时)

- 洛伦

尝试使用meshgrid:

[Cm, Sm] = meshgrid(C, S);
mat = Cm .* Sm;

编辑:nevermind,矩阵乘法也会这样做。你只需要一个列向量C和一个行向量S.然后做C * S。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top