MATLAB提取列号

时间:2016-02-04 06:28:14

标签: matlab

我的目标是创建一个随机的20乘5整数数组,通过从上到下和从左到右递增顺序对它们进行排序,然后计算每个结果20行的平均值。这给了我一个20乘20的数组。然后我必须找到其平均值最接近0的列。这是我到目前为止的代码:

RandomArray= randi([-100 100],20,5);
NewArray=reshape(sort(RandomArray(:)),20,5);
MeanArray= mean(transpose(NewArray(:,:)))
X=min(abs(x-0))

如何将平均值最接近0的列号存储到变量中?我只需要一个月的编码时间,所以这可能看起来像一个非常简单的问题。感谢

1 个答案:

答案 0 :(得分:1)

你几乎就在那里。您所需要的只是find

RandomArray= randi([-100 100],20,5);
NewArray=reshape(sort(RandomArray(:)),20,5);
% MeanArray= mean(transpose(NewArray(:,:))) %// gives means per row, not column
ColNum = find(abs(mean(NewArray,1))==min(abs(mean(NewArray,1)))); %// gives you the column number of the minimum
MeanColumn = RandomArray(:,ColNum);

find将为您提供abs(mean(NewArray))条目的索引,即每列平均值的绝对值等于同一数组的最小值,因此列的平均值为的索引为最接近0

请注意,您不需要MeanArray,因为它可以转置(可以通过NewArray.'完成,然后提供每列的平均值,即您的旧行。我放弃了所有内容。在find声明中。

根据comment by Matthias W.的建议,直接使用min的第二个输出而不是find更快:

RandomArray= randi([-100 100],20,5);
NewArray=reshape(sort(RandomArray(:)),20,5);
% MeanArray= mean(transpose(NewArray(:,:))) %// gives means per row, not column
[~,ColNum] = min(abs(mean(NewArray,1)));
MeanColumn = RandomArray(:,ColNum);