如何在Julia中获取多维数组最深层每个元素的长度?
解决Julia中嵌套数组最深层长度提取问题
没问题!在Julia里处理这种存储连通分量的三层嵌套数组,提取每个最深层数组的长度(也就是每个连通分量的节点数)非常简单,用**广播(broadcasting)**或者map就能轻松实现。
具体实现方法
假设你的三层嵌套数组名为conn_groups(类型为n-element Array{Array{Array{Int64,1},1},1}),只需要一行代码就能得到你想要的结果:
component_lengths = length.(conn_groups)
如果你更喜欢可读性更强的map写法,也可以这样写:
component_lengths = map(group -> length.(group), conn_groups)
原理说明
- 你的原始数组
conn_groups的每个元素是一个存储多个连通分量的数组(第二层结构),比如示例中的元素1是1-element Array{Array{Int64,1},1},元素2是2-element Array{Array{Int64,1},1}。 length.(group)会对group中的每个最内层数组(单个连通分量)计算长度,返回一个对应长度的数组。- 最终的
component_lengths会和原始数组的结构完全对应:每个位置对应原始数组的一个元素,里面是该元素下所有连通分量的长度列表。
示例验证
用你给出的示例构造测试数据:
# 构造测试数组 conn_groups = [ [[1:150...]], # 元素1:1个连通分量,长度150 [[1:50...], [51:150...]] # 元素2:2个连通分量,长度50和100 ] # 计算连通分量长度 component_lengths = length.(conn_groups)
运行后得到的component_lengths结果为:
2-element Vector{Vector{Int64}}: [150] [50, 100]
完全符合你期望的输出格式。
额外扩展
如果需要把所有连通分量的长度展平成一维数组(比如用于统计分量大小分布),可以用Iterators.flatten:
using Iterators # 未导入时需先执行此语句 flat_lengths = collect(Iterators.flatten(component_lengths)) # 结果:[150, 50, 100]
内容的提问来源于stack exchange,提问作者coolsv
相关产品推荐
相关产品推荐

