0

我有一个大小为 mx n 的数组。每行有 n 个元素,显示一些概率(在 0 和 1 之间)。我想找到其元素之间具有最大差异的行,而如果它的非零元素也更大会更好。

例如在数组 Arr 中:

Arr = [0.1   0     0.33   0     0.55  0;
       0.01  0     0.10   0     0.2   0;
       1     0.1   0      0     0     0;
       0.55  0     0.33   0     0.15  0;
       0.17  0.17  0.17   0.17  0.17  0.17]

最好的行是第 3 行,因为它有更多不同的值和更大的值。如何使用 Matlab 进行计算?

4

2 回答 2

4

似乎您正在寻找具有最大标准偏差的行,这基本上是衡量值与平均值相差多少的量度。

如果您想忽略零元素,请使用 Shai 的有用建议将零元素替换为NaN. 事实上,一些 MATLAB 的内置函数允许忽略它们:

Arr2 = Arr;
Arr2(~Arr) = NaN;

为了找到我们将沿行使用的标准偏差nanstd(不是std,因为它不会忽略值),第二维:NaN

nanstd(Arr2, 0, 2)

为了找到最大的标准差及其对应的行索引,我们将应用nanmax并获得两个输出变量:

[stdmax, idx] = nanmax(nanstd(Arr2, 0, 2));

现在idx保持保持所需行的索引。

例子

让我们在您在问题中提供的输入上运行此代码:

Arr = [0.1   0     0.33   0     0.55  0;
       0.01  0     0.10   0     0.2   0;
       1     0.1   0      0     0     0;
       0.55  0     0.33   0     0.15  0;
       0.17  0.17  0.17   0.17  0.17  0.17];

Arr2 = Arr;
Arr2(~Arr) = NaN;
[maxstd, idx] = nanmax(nanstd(Arr2, 0, 2))

idx =
    3

请注意,第 3 行中的值之间的差异比第 1 行中的值大得多,因此第 3 行的标准差更大。这也对应于您的评论:

...因此,具有 3 个零和 3 个非零但接近值的行比具有 4 个零和 2 个非常不同的值的行更差。

出于这个原因,我相信在这种情况下3确实是正确的答案。

于 2013-01-03T13:53:53.580 回答
0

您似乎希望忽略0矩阵中的 s 。您可以通过将它们设置为NaN并继续使用忽略 s 的特殊内置函数NaN(例如nanmin,nanmax等)来实现这一点

ri下面是一个示例代码,用于查找最小(非零)响应和最大响应之间差异最大的行 ( ):

nArr = Arr;
nArr( Arr == 0 ) = NaN; % replace zeros with NaNs
mn = nanmin(nArr, [], 2); % find minimal, non zero response at each row
mx = nanmax(nArr, [], 2); % maximal response
[~, ri] = nanmax( mx - mn ); % fid the row with maximal difference
于 2013-01-03T12:52:35.067 回答