matlab - 矩阵内的操作避免循环

标签 matlab matrix vectorization

我有一个相当简单的问题,但我无法在 MATLAB 中得到正确的结果。

我正在 Matlab 中编写代码,其中有一个 200x3 矩阵。该数据对应于 10 个不同点的记录,我为每个点拍摄了 20 帧。

这只是为了解决测量系统中的误差。所以现在我想通过计算测量的独立坐标的平均值来计算这个矩阵中每个点的 3D 坐标。

一个例子(1 个点有 3 个测量值)是:

MeasuredFrames (Point 1) =
   x         y         z
1.0000    2.0000    3.0000
1.1000    2.2000    2.9000
0.9000    2.0000    3.1000

Point = mean(MeasuredFrames(1:3, :))

Point =

1.0000    2.0667    3.0000

现在我想得到这个结果,但是有 10 个点,全部存储在 [200x3] 数组中,间隔为 20 帧。

有什么想法吗?

提前致谢!

最佳答案

如果您有图像处理工具箱 blockproc可能是一个选项:

A = blockproc(data,[20 3],@(x) mean(x.data,1))

如果不是以下使用permutereshape也适用:

B = permute(mean(reshape(data,20,10,3),1),[2,3,1])

解释:

%// transform data to 3D-Matrix 
a = reshape(data,20,10,3);
%// avarage in first dimension
b = mean(a,1);
%// transform back to 10x3 matrix
c = permute(b,[2,3,1])

一些示例数据:

x = [ 1.0000    2.0000    3.0000
      1.1000    2.2000    2.9000
      0.9000    2.0000    3.1000
      1.0000    2.0000    3.0000
      1.1000    2.2000    2.9000
      0.9000    2.0000    3.1000
      1.0000    2.0000    3.0000
      1.1000    2.2000    2.9000
      0.9000    2.0000    3.1000
      1.1000    2.2000    2.9000]
data = kron(1:20,x.').';  

    A = B =

    1.5150    3.1200    4.4850
    3.5350    7.2800   10.4650
    5.5550   11.4400   16.4450
    7.5750   15.6000   22.4250
    9.5950   19.7600   28.4050
   11.6150   23.9200   34.3850
   13.6350   28.0800   40.3650
   15.6550   32.2400   46.3450
   17.6750   36.4000   52.3250
   19.6950   40.5600   58.3050

关于matlab - 矩阵内的操作避免循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808058/

相关文章:

matlab - 在matlab中将范围划分为垃圾箱

java - 创建要写入文件 Java 的 PPM 图像

python - 从大于 2 维的 numpy 数组中选择随机窗口

python - 计算 Pandas 中行之间不同列的数量

Matlab 在 RegressionTree mex 文件中崩溃

matlab - 将每行中的最大元素设置为 1,其他元素为 0

performance - MATLAB:如何有效地创建一个矩阵,这是外积的结果?

matlab - 替换另一个矩阵为假的矩阵的所有值(0)

c++ - 在 C 中填充二维动态分配数组

arrays - MATLAB 中的索引向量效率低下吗?