1

我有一个数组(“真正的”笛卡尔坐标),它的大小(natoms*3,1)natoms原子数。我还有大量(500,000)个观察值存储在 size 的数组中(nobs, natoms*3)。现在,我想创建一个所有观测值与真实坐标之间的差异数组。我想通过做类似的事情来简单地矢量化它

for iat = 1:natoms
  xyz_dif = xyz_obs(:, 3*iat-2:3*iat) - xyz_true(3*iat-2:3*iat)
end

但这不起作用。相反,我被迫像这样经历每一个观察:

for iat = 1:natoms
  for iobs = 1:nobs
     xyz_diff(iobs, 3*iat-2:3*iat) = xyzs(iobs, 3*iat-2:3*iat) - xyz_true(3*iat-2:3*iat)
  end
end

但这似乎效率很低。有没有更快、更有效的方法来做到这一点?

谢谢。

4

2 回答 2

3

采用bsxfun

 xyz_diff = bsxfun(@minus, xyz_true', xyz_obs)
于 2013-07-11T21:54:00.663 回答
2

另一种解决方案,在我看来更具可读性是使用矩阵乘法:

xyz_diff =  xyz_obs-ones(nobs,1)*xyz_true;
于 2013-07-12T00:11:24.247 回答