我有一个矩阵y
和一个向量x
,我需要找到x
中的每个值到y
中的每个向量的Map所产生的所有可能的向量。
这很难理解,让我们用一个例子来解释:,这里有一个例子,我有一个向量x = [0.7 + 0.7i; 0.7-0.7i];
,这个矩阵应该是这个。这相当于等于Z = [x_1 0; x_2 0; 0 x_1; 0 x_2; x_1 x_1; x_1 x_2; x_2 x_2; x_2 x_1];
。这意味着它根据y
中的索引值将x
中的每个值Map到Z
行中。
这是我的尝试代码:清除所有;CLC;
y = [];
G = 2;
v = 1 : G;
for i = 1: G
x=nchoosek(v,i);
m = zeros(size(x,1),G-i);
y =[y ; x m]; % creat the matrix y
end
x = [0.7 + 0.7i; 0.7-0.7i];
Z = []; s = zeros(G,1);
for k=1:size(x,1)
for i=1:size(y,1)
n=y(i,:);
n=n(n ~= 0);
s(n)=x(k);
Z=[Z s];
s = zeros(G,1);
end
end
我的代码中的问题是矩阵Z
显示逆,这意味着它从x
获取输入x_1
,然后将其Map到y
中所有可能的值。例如,矩阵Z
以[x_1 0; 0 x_1; x_1 x_1 ….]
开始,但应该是反转的,这意味着获取x
中的每个值并将其Map,如上面的示例[x_1 0; x_2 0; x_3 0 …..]
所示。第二个问题,当y
包含多个非零值时,我的代码不能获得所有可能的向量,它只能得到[x_1 x_1; x_2 x_2];
,但我不能Map其他可能性,如[x_1 x_2; x_2 x_1]
等等。
我怎么才能解决这个问题呢?
更新
以下是更新后的问题,并有明确的描述。我有向量x
和矩阵y
,我需要按照矩阵y
中每一行的索引填充矩阵z
。例如,如果矩阵y
中的第一行是[1 0]
或[0 1]
;那么我将从x中获取所有可能的值,并将其放入z
中,在本例中,y
中行的数字为1。然后,对矩阵y
中的第2行进行相同的处理,即[2 0]
或[0 2]
;这意味着z中的第二列将填充x中所有可能的值。然后,可以填充z
中的两列,这等价于y
中的[1 2]
,因此它将从x
中获取第一个值,并使用x
中的所有其他可能值填充它,依此类推。z
中的行不应重复。
矩阵Z
与下面AboAmmar的答案完全相同,但使用向量较长的x
和较大的矩阵y
的循环IF会有点复杂。
2条答案
按热度按时间jaxagkaj1#
正如您所描述的,
y
的每一行和相应的输出有4种不同的情况:1.
[0 1]
或[1 0]
=>[x*0]1.
[0 2]
或[2 0]
=>[0*x]1.
[1 2]
=>[x1 x1;x1 x2;x2 x2;x2 x1]1.
[2 1]
=>[x1 x1;x2 x1;x2 x2;x1 x2]这些似乎并不遵循任何明显的规则。因此,最简单(但不是最聪明)的解决方案是使用
if-else
并从上面选择合适的案例。我们没有关于可能的索引的所有信息,或者可能发生像[1 1]
和[2 2]
这样的行,所以下面的解决方案绝不是穷尽的;如果将其他输入输入到y
矩阵中,可能会发生令人惊讶的错误。mrwjdhj32#
如果您在
y
中有固定的长度,例如,如果y
中的每个向量都有一个值,而其他的值是零,或者两个非零值,等等,那么您的代码是有效的。因此,您可以分别为每个长度编写代码,然后通过组合所有其他矩阵来构建矩阵
Z
。