![]() |
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]]; 我的助教给了我添加到输出矩阵的那一行。他一年四季都没有教我们太多语法,所以我不确定我做错了什么。任何帮助是极大的赞赏。 [B]回答:[/B] 如果要从头开始构建矩阵output ,则应确保尚未将其初始化为任何东西。为此,可以在代码开头将其设置为空矩阵: output = []; 另外,如果您知道output是多少,那么[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html#f8-793781"]如果您预先分配数组[/URL] output并索引到数组中以分配值而不是向其[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html#f8-793781"]附加值,则代码将更有效地运行[/URL] 。在您的情况下, output应具有与ordered1数组中唯一值相同的行数,因此您可以使用函数[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/unique.html"]UNIQUE[/URL]来预分配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 ... [B]一些其他建议... [/B] 即使您解决了遇到的错误,您也会在上面的代码中遇到更多的问题: <ul>我相信您实际上是在用代码计算[URL="http://en.wikipedia.org/wiki/Probability_density_function"]概率密度函数[/URL] (或PDF)。为了获得[URL="http://en.wikipedia.org/wiki/Cumulative_distribution_function"]累积分布函数[/URL] (或CDF),您必须对output的第一列中的最终值执行累积和。您可以使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cumsum.html"]CUMSUM[/URL]函数执行此[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cumsum.html"]操作[/URL] : output(:,1) = cumsum(output(:,1)); 当循环到达ordered1的最后一个元素时,您的循环将引发错误。在内部while循环中, k的值可以变为538,当您尝试在任何地方访问ordered1(k)时,将导致引发错误。为了解决这个问题,您将必须在代码中的多个点上将校验添加到k的值。这样的一点就是您的内部while循环,可以将其重写为: while (k |
所有时间均为北京时间。现在的时间是 17:25。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.