和往常一样,我是一个python中的tyro。然而,我有一个相当大的项目代码。它是一个带有细胞自动机的表面流模型。无论如何,我也希望在我的模型中包含建筑屋顶。假设您有一个ascii文件,它指示带有1的建筑物,而其余的是0。只有这两个州。现在,我想找到所有指示同一建筑的相邻单元,并将它们(或者更确切地说是y、x和一个以上(可能是立面)的信息,即3列)存储在单个建筑阵列中。请记住,尽管对角线连接的单元不属于同一个建筑,但建筑可以有所有可能的形式。所以只有北、南、西、东三个单元可以属于同一个建筑。
我做了家庭作业并用谷歌搜索了一下,但到目前为止我找不到满意的答案。
示例: 初始土地覆盖阵列:
([0,0,0,0,0,0,0]
[0,0,1,0,0,0,0]
[0,1,1,1,0,1,1]
[0,1,0,1,0,0,1]
[0,0,0,0,0,0,0])
输出(现在需要初始数组中单元格的坐标):
building_1=([1,2],[2,1],[2,2],[2,3],[3,1],[3,3])
building_2=([2,5],[2,6],[3,6])
非常感谢您的帮助!
看起来这个函数做的正是您想要的(从the numpy documentation):
或者,您的用例似乎需要使用返回的坐标来索引数组。
您可能需要尝试
numpy.where
。您可以使用} 函数来标识不同的建筑。
scipy.ndimage
中的^{下面是您的示例数组,包含两个建筑:
导入
label
。将
label
应用到a
。它返回两个值:标记位置的数组和找到的不同对象(在本例中是建筑物)的数量。要获得建筑物的坐标,可以使用
np.where
。例如它返回数组的元组;第
k
个数组保存第k
个维度的坐标。例如,可以使用np.column_stack
将它们组合成一个数组:您可能需要所有坐标数组的列表。这里有一种创建这样一个列表的方法。
为了方便起见,首先创建一个标签列表:
使用列表理解创建坐标数组列表。
现在你的建筑数据在
labels
和coords
中。例如,第一个建筑被标记为labels[0]
,其坐标在coords[0]
:谢谢你的回答!这里有一点修正。如果你看到土地覆盖阵列,我实际上没有0作为背景信息,但-9999(0对地理信息系统的人来说太宝贵了)。我忘了提那件事。但多亏了机器渴望的提示,我做了一个变通,通过landcover=np.where(landcover>;-9999,landcover,0)给all-9999分配了0。之后我可以使用标签。实际的目的是找到最低的单元并将其分配为出口。如果有人有更有效的方法,请告诉我!
原始数据集有-9999作为背景信息,1作为构建单元。
这是一张随机数字高程图。
由于机器的渴望,为了使用label@
然后我给不同的建筑贴上标签,把这些区别算在一起,@Warren Weckesser,剩下的几乎都是你的。谢谢!
我正在遍历建筑坐标列表,以确定分配为出口的最低单元
我根据每个建筑单元的DEM信息,对建筑阵列进行升序排序,以找到最底层的建筑单元。
最低的建筑单元将用作屋顶雨水出口
这是输出。前两列是den landcover数组中的索引,最后一列是相邻建筑单元的数量。
相关问题 更多 >
编程相关推荐