将一维索引数组转换为二维矩阵

23日视图(30天)
约翰Cruce
约翰Cruce 2021年10月3日
评论道: dpb 2021年10月4日
我有一个一维数组的雷达数据纬度,经度,和海拔(2301 x 1201 x维度24)。因为并不是所有纬度、经度和海拔包含可测量的反射率(雷达数据),雷达数据被存储为一个一维数组来保存索引存储空间。(如果所有纬度、经度和海拔包含数据,这个一维数组将跨越66324024 (2301 x1201x24)细胞)。
指数是从零开始的,数据存储的顺序增加经度、纬度、高度。举个例子,网格的西南角的最低高度指数0。网格的东南角的最低高度指数2300。
我需要这一维数组到一个二维数组基于第一个高度级别(或者在一个三维数组lattitude,经度,和高度)。我开始将线性指标转换为下标,但是一旦我这样做,我如何广播indexed-based反射率在经度和纬度的二维数组?
[lonind, latind altind] = ind2sub ([2301 1201 24], inddata);

接受的答案

dpb
dpb 2021年10月4日
编辑:dpb 2021年10月4日
你不需要线性地址转换为指标分配到数组中。的确,如果你有种族隔离的高度成的向量2300(或2301 ?)元素,然后创建一个2 d平面为每个海拔很简单—
P = 0 (2301、1201);% 2 d平面阵列
(r、c、p) = ind2sub ([2301 1201 24], inddata (1:2301));% - - > 1:2301第一高度平面
P (sub2ind(大小(P)、r、c)) = r (1:2301);%分配第一高度雷达数据的位置
可以遍历整个数组2301年组为每个海拔飞机或计算基于数向量中的位置。
注:如果,事实上,存储的指数是基于0,你需要添加一个 inddata 基于数组上面匹配的数组索引在MATLAB。如果你有控制计算这些指标,它可能是有意义的修理,除非相同的数据被用于基于c代码或somesuch。
处理一个子集作为三维数组,只是建立一个三维数组1:nPlanes希望处理和做同样的事,除了把尽可能多的段2301指数需要飞机的数量,不只是一个。
附录:
注意,您可以减去 ElevationLevel * NumElementsPerElevation 从每个向量的 NumElementsPerElevation 指数作为指标为给定的2 d平面的位置——线性存储的元素是行,然后列乘飞机。
让你推广了线性处理成飞机通过引用都好像是r, c指数的第一架飞机。这样做完全可以消除ind2sub调用。
2的评论
dpb
dpb 2021年10月4日
很高兴帮助……在deed, often for similar things the linear addresses are the ticket--one thing if get a list of [r,c,p] indices from ind2sub ,那么你必须使用一个array-looping结构把它们放入一个数组索引表达式MATLAB将扩展列表的组合,而不是从每个向量处理每个作为一个单独的元素。我不完全理解 为什么 这一决定背后;我想不出这是我希望的行为但我认为它有一些特定的情况下,这就是控制了决定。或者,也许只是做这样“一开始”,仍然因为兼容性。

登录置评。

更多的答案(0)

类别

找到更多的在矩阵和数组帮助中心文件交换

下载188bet金宝搏


释放

R2018a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!