使用基于第三矩阵C的条件语句从矩阵A到矩阵B的矩阵分配

时间:2013-01-16 15:40:46

标签: matlab matrix

如果你能回复,我有两个问题:

Q1)我有一个矩阵choice,其中每个人正在做出4个可能的选择,表示为1,2,3和4。 我有三个矩阵A1A2A3,其中包含每个人和每个时间段的收入信息。假设我有n个人和t个时间段,因此A1A2A3是n-by-t,choice是n-by-t。

现在我想创建另一个矩阵B,其中B将根据选择矩阵中的值从A中选择元素,即如果choice(n,t)==1,则B(n,t) = A1(n,t)。如果是choice(n,t)==2,则为B(n,t) = A2(n,t),依此类推。

我尝试了for循环和if语句,我无法做到。请帮忙。

Q2)我有一个收入矩阵AA是维度n-by-t。有些人收入低,有些人收入高。假设任何收入<1000的人都很低,1000以上的人都很高。在我的模拟结束时,我需要知道每个人是高收入还是低收入。如何从更大的矩阵中获得高收入和低收入矩阵?

2 个答案:

答案 0 :(得分:1)

Q1:

C = choice %else the code gets too long
B = A1 .* (C==1) + A2 .* (C==2) + A3 .* (C==3)

如果您只有A1 A2 A3,我不知道您想如何处理B中的值'4',但这应该有效。

[编辑]: 如果选择为'4',则对于上面定义的B i,B的元素将为0。

Q2: 这个有点模糊。也许这就是你想要的:

HighIncome = A > 1000
LowIncome = A <= 1000

如果不这样做,请更准确地解释您的目标。

[编辑]: 基于你对Q2的略微模糊的解释,听起来你不喜欢这样:

A_high_income = A .* (A > 1000)
A_low_income = A .* (A <= 1000)
CHOICE_high_income = choice .* (A > 1000)
CHOICE_high_income = choice .* (A <= 1000)

高收入矩阵在低收入位置有零,反之亦然。 这对恕我直言并没有太大的意义,但它是我能得到的最接近你的描述。 如果不这样做,请按照我在下面的评论中的说明进行操作并发布一些示例。

答案 1 :(得分:0)

Q1:你可以使用三个简单的语句和一些逻辑索引。

B = A1;
B(choice == 2) = A2(choice == 2);
B(choice == 3) = A3(choice == 3);

Q2:要根据收入将A和选项分成两部分,首先要找到“低收入”行的索引,并使用它来从矩阵中获取行。

lowIncomeNdx = any(A < 1000, 2);
lowIncome = A(lowIncomeNdx, :);
lowIncomeChoice = choice(lowIncomeNdx, :);
highIncome = A(~lowIncomeNdx, :);
highIncomeChoice = choice(~lowIncomeNdx, :);