【发布时间】:2019-07-03 07:01:51
【问题描述】:
这个问题的背景与a past post有关。选定的答案提供了一个很好的解决方案。但是,我还想补充一点细微差别。
这些数组没有使用上面linked-to post 中给出的数组,而是突出显示上一组解决方案无法按照我想要的方式处理的情况。新的数组是:
import numpy as np
asp = np.array([2,1,8,2,5,4,6,4,3,3,3,3,2,1,8,2]).reshape((4,4)) #aspect
slp = np.array([11,11,12,11,12,11,12,10,9,9,9,10,11,10,11,11]).reshape((4,4)) #slope
elv = np.array([16,15,15,16,17,15,15,15,15,15,14,14,16,15,16,16]).reshape((4,4)) #elevation
以前的解决方案在高程、坡度和坡向相同的地方分配了唯一的区域编号,无论这些唯一区域在空间上是否连续。下图试图显示此结果(请参见左下角 2 个数组中的上一个)。所需的结果将类似于图像左下角的下部数组。例如,请注意每个角单元具有相同的高程、坡度和坡向,但在空间上并不连续,因此应为其分配唯一的区域 ID。 “空间连续”被定义为具有相同高程、坡度和坡向的 2 个(或更多)相邻(相邻或对角线)像元。下图中以红色突出显示的单元格描述了这一点。
在之前没有考虑结果区域中空间连续性的解决方案中,对我来说最有意义的是@Stephen Rauch。他的解决方案是(除其他外):
combined = 10000 * asp + 100 * slp + elv
unique = dict(((v, i + 1) for i, v in enumerate(np.unique(combined))))
combined_unique = np.vectorize(unique.get)(combined)
【问题讨论】:
-
您可以按顺序填充区域。
-
谷歌搜索“floodfill numpy”让我找到了 (stackoverflow.com/questions/39173947/…),这让我再次前进。感谢@MadPhysicist 的术语提示
标签: python numpy multidimensional-array