Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB在数组中设置矩阵值

我正在尝试编写一些代码来计算Matlab中的累积分布函数。当我尝试将结果实际放入数组时,它会大吼大叫。

tempnum = ordered1(1); k=2; while(k vertcat CAT arguments dimensions are not consistent. Error in ==> lab8 at 1164 output = [output;[(count/537),tempnum]]; 我的助教给了我添加到输出矩阵的那一行。他一年四季都没有教我们太多语法,所以我不确定我做错了什么。任何帮助是极大的赞赏。



回答:

如果要从头开始构建矩阵output ,则应确保尚未将其初始化为任何东西。为此,可以在代码开头将其设置为空矩阵:

output = []; 另外,如果您知道output是多少,那么如果您预先分配数组 output并索引到数组中以分配值而不是向其附加值,则代码将更有效地运行 。在您的情况下, output应具有与ordered1数组中唯一值相同的行数,因此您可以使用函数UNIQUE来预分配output :

nRows = numel(unique(ordered1)); %# Get the number of unique values output = zeros(nRows,2); %# Initialize output 然后,您将必须保留一个单独的计数器(例如r )以跟踪将添加到下一个output索引:

... output(r,:) = [count/537 tempnum]; %# Overwrite a row in output r = r+1; %# Increment the row index ... 一些其他建议...

即使您解决了遇到的错误,您也会在上面的代码中遇到更多的问题:

    我相信您实际上是在用代码计算概率密度函数 (或PDF)。为了获得累积分布函数 (或CDF),您必须对output的第一列中的最终值执行累积和。您可以使用CUMSUM函数执行此操作

    output(:,1) = cumsum(output(:,1)); 当循环到达ordered1的最后一个元素时,您的循环将引发错误。在内部while循环中, k的值可以变为538,当您尝试在任何地方访问ordered1(k)时,将导致引发错误。为了解决这个问题,您将必须在代码中的多个点上将校验添加到k的值。这样的一点就是您的内部while循环,可以将其重写为:

    while (k
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 21:35


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.