登录论坛

查看完整版本 : MATLAB在数组中设置矩阵值


poster
2019-12-10, 20:41
我正在尝试编写一些代码来计算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是多少,那么如果您预先分配数组 (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html#f8-793781) output并索引到数组中以分配值而不是向其附加值,则代码将更有效地运行 (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html#f8-793781) 。在您的情况下, output应具有与ordered1数组中唯一值相同的行数,因此您可以使用函数UNIQUE (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/unique.html)来预分配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 ... 一些其他建议...

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

<ul>我相信您实际上是在用代码计算概率密度函数 (http://en.wikipedia.org/wiki/Probability_density_function) (或PDF)。为了获得累积分布函数 (http://en.wikipedia.org/wiki/Cumulative_distribution_function) (或CDF),您必须对output的第一列中的最终值执行累积和。您可以使用CUMSUM (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cumsum.html)函数执行此操作 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cumsum.html) :

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

while (k