0

如果您能友好地回答,我有两个问题:

Q1) 我有一个矩阵choice,每个人做出 4 种可能的选择,分别表示为 1、2、3 和 4。我有三个矩阵A1A2A3其中包含每个人和每个时间段的收入信息。假设我有 n 个人和 t 个时间段,所以A1, A2,A3是 n-by-t 并且choice是 n-by-t。

现在我想制作另一个矩阵,根据选择矩阵中的值从B哪里B选择元素,即如果,那么。如果,那么,以此类推。Achoice(n,t)==1B(n,t) = A1(n,t)choice(n,t)==2B(n,t) = A2(n,t)

我试过for循环和if语句,我做不到。请帮忙。

Q2)我有一个A收入矩阵。A是维度 n×t。有些人收入低,有些人收入高。假设任何收入<1000 的人都是低收入,高于 1000 的人是高收入。在我的模拟结束时,我需要知道每个人是高收入还是低收入。如何从更大的矩阵中制作高收入和低收入矩阵?

4

2 回答 2

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)

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

于 2013-01-16T16:35:57.517 回答
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, :);
于 2013-01-16T16:43:01.173 回答