我需要将其转换为 Matlab 代码,并且在没有“表格”功能的情况下苦苦挣扎。
Table[{i,1000,ability,savingsrate,0,RandomInteger[{15,30}],1,0},{i,nrhhs}];
所以基本上,这些值都只是数字,我想我需要使用函数句柄,或者可能是 for 循环。我不是专家,所以我真的需要帮助吗?
我需要将其转换为 Matlab 代码,并且在没有“表格”功能的情况下苦苦挣扎。
Table[{i,1000,ability,savingsrate,0,RandomInteger[{15,30}],1,0},{i,nrhhs}];
所以基本上,这些值都只是数字,我想我需要使用函数句柄,或者可能是 for 循环。我不是专家,所以我真的需要帮助吗?
我不是数学专家(很久以前才用过)。根据Table 函数的文档,您正在使用这种形式:
表[expr, {i, imax}]
当 i 从 1 运行到 imax 时,生成 expr 的值列表。
看起来您的语句将生成列表复制第一个参数中的列表,i
从 1 增加到nrhhs
并使用不同的随机数。
在 MATLAB 中,输出可以等价于矩阵或元胞数组。
要创建一个以行作为列表的矩阵,您可以执行以下操作:
result = [ (1:nrhhs)', repmat([1000,ability,savingsrate,0],nrhhs,1), ...
randi([15 30],nrhhs,1), repmat([1,0],nrhhs,1) ];
您可以将上述矩阵转换为元胞数组:
resultcell = cell2mat(result, ones(nrhhs,1));
您给出的“表格”示例创建了一个 nrhhs 子列表的列表,每个子列表包含 8 个数字(i、1000、能力、储蓄率、0、15 到 30 之间的随机整数、1 和 0)。这本质上(尽管不完全)与 nrhhs x 8 矩阵相同。
但是,假设您确实只想要一个矩阵,Matlab 中的类似 for 循环将是:
result = zeros(nrhhs,8); % preallocate memory for the result
for i = 1:nrhhs
result(i,:) = [i 1000 ability savingsrate 0 randi([15 30]) 1 0];
end
这种方法可能比 yuk 的答案慢(它更有效地使用向量来避免 for 循环),但根据您对 Matlab 的熟悉程度,可能更容易区分。