【问题标题】:Median of an ENTIRE multi-dimensional array (not of just one dimension) in MATLABMATLAB中整个多维数组(不仅仅是一维)的中位数
【发布时间】:2016-09-26 09:02:09
【问题描述】:

我有一个 10 x 10 的值数组,A。我需要所有这些值的中位数M。我可以很容易地找到沿行或沿列的中位数:

M = median(A,1) %or
M = median(A,2)

但是,M = median(A) 也返回沿行的中位数。

如何找到所有值的单个中值?我知道我可以将数组转换为一个非常长的向量,但这似乎令人不快且效率低下。有没有更简单的解决方案?我也希望能够对多维数组执行此操作。

谢谢!

【问题讨论】:

  • 将矩阵转换为单个向量是您可以在 MATLAB 中执行的最快操作之一。请记住,MATLAB 中的内存是按列优先顺序排列的,因此实际上使用多维访问索引来获取正确的内存位置是多维访问具有单个索引的元素的语法糖。 Luis 的以下建议是将矩阵展开成一个长向量并执行中位数......你不能更快地得到它。
  • 完美!我高估了转换的耗时。谢谢!
  • 请接受 Luis 的回答,让社区知道您不再需要帮助。

标签: arrays matlab multidimensional-array median


【解决方案1】:

首先通过使用(:) 进行索引进行线性化。这会将任何数组转换为列数组。然后计算中位数:

M = median(A(:));

我认为使用(:) 进行索引不需要任何内存重新分配。它只是以column-major 的顺序读取数组。

【讨论】:

  • 除了这个,真的没有别的答案了。 +1。
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多