如何在3D矩阵中进行2D逻辑数组索引?

时间:2013-04-01 03:07:49

标签: matlab

TEMP = taux(LAT < 0 & LAT > -9 & LON < 90 & LON > 70,timeIndex);

输出这个奇妙的错误:

Index exceeds matrix dimensions.

taux is 360x160x192.

LAT 160x360 LON 。 timeIndex是 192x1 (例如,它是1998年到1999年之间的值的索引)

即使我反转矩阵或尝试以下操作,错误仍然存​​在。

TEMP = taux((LAT < 0 & LAT > -9 & LON < 90 & LON > 70)',timeIndex)

TEMP = taux(LAT < 0 & LAT > -9 & LON < 90 & LON > 70,LAT < 0 & LAT > -9 & LON < 90 & LON > 70,timeIndex);

1 个答案:

答案 0 :(得分:1)

据我所知,您只能使用索引来单独选择每个维度的部分,或者一次性对所有维度使用单个索引矩阵。没有办法将某些维度加在一起并留下一些自己。

我猜你想要特定纬度和经度的值以某种方式保持分组。然后,一种方法是根据LATLON矩阵找到要选择的值的线性索引,然后为每个时间索引偏移这些索引:

latlon = (LAT < 0 & LAT > -9 & LON < 90 & LON > 70)';
timeOffset = size(taux, 1) * size(taux, 2) * (timeIndex' - 1)
indices = bsxfun(@plus, find(latlon), timeOffset);
TEMP = taux(indices);

这将返回一个矩阵,其中每一行对应不同的纬度和经度,每列对应不同的时间。