我的目标是创建一个随机的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的列号存储到变量中?我只需要一个月的编码时间,所以这可能看起来像一个非常简单的问题。感谢
答案 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);