【问题标题】:Counting the number of elements in matlab在matlab中计算元素的数量
【发布时间】:2011-04-29 08:46:45
【问题描述】:

我是 MATLAB 新手。假设我有一个像 x = [1 1 1 1 1 1 0 0 1 0] 这样的向量。我想计算向量中的元素总数和向量中非零元素的数量。然后得出两个数字的比率。我在 MATLAB 帮助中搜索。如何计算元素,但直到现在我还没有得到任何运气。如果有人向我提供帮助,那将是很大的帮助。提前致谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    你可以通过numel(x)获取元素个数。

    您可以使用sum(x ~= 0) 获取非零的数量。

    所以这个比率是一个除以另一个。

    【讨论】:

    • @Oli:感谢您的快速回复,我正在使用 all(x==1) 来检查向量 x 是否包含所有非零元素。但即使我有一个像 x = [0 0 0 0 0 0 ] 这样的向量,所有 (x==1) 都会给我一个 TRUE 值,你能告诉我为什么会这样吗?
    • @user:这给了我假的,不是真的。
    • 哦...对不起我的错...假设我想检查我的所有元素是否都为零,那么 all(x==0) 会起作用吗?
    • @user:是的,这会起作用。或者,~any(x) 也可以。
    • @Oli:内积是一种更快的非零元素方法,适用于布尔向量,例如这个。如果x 是列向量,x'*x 给出的答案与nnzsum() 相同,并且速度快一个数量级。
    【解决方案2】:

    找到非零元素数量的正确方法(通常)是使用nnz() 函数;使用sum() 也适用于这种特定 情况,但如果使用的矩阵中存在除零和一以外的数字,则会失败。因此,要计算总元素数、非零元素数和比率,请使用如下代码:

    x = [1 1 1 1 1 1 0 0 1 0];
    nonzeroes = nnz(x);
    total = numel(x);
    ratio = nonzeroes / total;
    

    【讨论】:

      【解决方案3】:

      一个向量中非零元素占所有元素的比例为:

      r = length(find(x)) / length(x)
      

      length 的作用是显而易见的。 find 为您提供所有非零元素的索引。

      编辑:修正了使用大小而不是长度的错误。

      【讨论】:

      • 不,因为size 没有给你一个标量!
      • @Darhuuk:删除-1。但是numel 是比length 更通用的解决方案(考虑一下如果x 是矩阵而不是向量会发生什么)。
      • @Oli-Charlesworth 好点,当你输入你的评论并且已经更新了我的答案以澄清时,我的想法是一样的。
      【解决方案4】:

      a= numel(find(x))/numel(x) 是另一种方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        相关资源
        最近更新 更多