【发布时间】:2011-04-29 08:46:45
【问题描述】:
我是 MATLAB 新手。假设我有一个像 x = [1 1 1 1 1 1 0 0 1 0] 这样的向量。我想计算向量中的元素总数和向量中非零元素的数量。然后得出两个数字的比率。我在 MATLAB 帮助中搜索。如何计算元素,但直到现在我还没有得到任何运气。如果有人向我提供帮助,那将是很大的帮助。提前致谢。
【问题讨论】:
标签: matlab
我是 MATLAB 新手。假设我有一个像 x = [1 1 1 1 1 1 0 0 1 0] 这样的向量。我想计算向量中的元素总数和向量中非零元素的数量。然后得出两个数字的比率。我在 MATLAB 帮助中搜索。如何计算元素,但直到现在我还没有得到任何运气。如果有人向我提供帮助,那将是很大的帮助。提前致谢。
【问题讨论】:
标签: matlab
【讨论】:
~any(x) 也可以。
x 是列向量,x'*x 给出的答案与nnz 或sum() 相同,并且速度快一个数量级。
找到非零元素数量的正确方法(通常)是使用nnz() 函数;使用sum() 也适用于这种特定 情况,但如果使用的矩阵中存在除零和一以外的数字,则会失败。因此,要计算总元素数、非零元素数和比率,请使用如下代码:
x = [1 1 1 1 1 1 0 0 1 0];
nonzeroes = nnz(x);
total = numel(x);
ratio = nonzeroes / total;
【讨论】:
一个向量中非零元素占所有元素的比例为:
r = length(find(x)) / length(x)
length 的作用是显而易见的。 find 为您提供所有非零元素的索引。
编辑:修正了使用大小而不是长度的错误。
【讨论】:
size 没有给你一个标量!
numel 是比length 更通用的解决方案(考虑一下如果x 是矩阵而不是向量会发生什么)。
a= numel(find(x))/numel(x) 是另一种方式。
【讨论】: