MATLAB提取列数

3

我的目标是创建一个随机的20行5列的整数数组,按从上到下和从左到右递增的顺序进行排序,然后计算每个结果中的20行的平均值。这给了我一个由平均值组成的1x20数组。然后我必须找到平均值最接近0的列。以下是我的代码:

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

如何将平均值最接近0的列号存储到变量中?我只学了一个月编程,所以这可能看起来是一个非常简单的问题。谢谢


在文档中查看min函数的第二个输出。它会给出最小值的索引而不是值。 - Dan
1个回答

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语句中。
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);

5
min 函数也可以返回列索引(不需要使用 find);) -- [MinVal,ColNum] = min(abs(mean(NewArray,1))) - Matthias W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接