Julia 1.9.0中构造任意维度特定规则多维数组H的方法
任意维度张量的通用生成代码(Julia 1.9.0)
你可以通过动态生成每个维度的切片范围实现任意维度的通用逻辑,利用Julia的元组展开特性,无需针对不同维度写分支判断。
通用实现代码
function create_indicator_tensor(tensor_size, jdx::CartesianIndex) H = zeros(tensor_size) # 将CartesianIndex转为元组,为每个维度生成j:end的切片范围后展开为索引 H[(j:end for j in Tuple(jdx))...] .= 1 return H end
测试示例
2维情况(与你的示例一致)
tensor_size = (4,4) jdx = CartesianIndex(3,2) result = create_indicator_tensor(tensor_size, jdx) # 输出: # 4×4 Matrix{Float64}: # 0.0 0.0 0.0 0.0 # 0.0 0.0 0.0 0.0 # 0.0 1.0 1.0 1.0 # 0.0 1.0 1.0 1.0
3维情况测试
tensor_size_3d = (3,3,3) jdx_3d = CartesianIndex(2,1,3) result_3d = create_indicator_tensor(tensor_size_3d, jdx_3d) # 所有满足i1≥2、i2≥1、i3≥3的位置为1 # 例如 result_3d[2,1,3] = 1,result_3d[3,3,3] = 1
代码说明
Tuple(jdx)将CartesianIndex转换为对应维度的索引元组,比如CartesianIndex(3,2)转为(3,2)- 生成器
(j:end for j in Tuple(jdx))为每个维度创建从j到末尾的切片范围,2维时生成(3:end, 2:end) ...是Julia的元组展开运算符,把生成的切片范围序列展开为数组的索引参数,等价于手动写H[3:end,2:end]这类代码,天然适配任意维度
内容的提问来源于stack exchange,提问作者Sakurai.JJ
相关产品推荐
相关产品推荐

