我正在处理一个121x137(I,j(数组(死亡率表(,并试图从中创建一个121x1向量,该向量由(I+1,j+1(值组成(即索引(50,50(,(51,51(等。
我使用以下代码-BaseTable是我的121x137数组:
age=50
survivalcurve = for i in age:nrow(BaseTable)-1
for j in age:ncol(BaseTable)-1
println(getindex(FemaleBaseTable, i+1, j+1))
end
end
然而,当我这样做的时候,它会返回I和j的所有值——如果我把我想要的值想象成一条从上到下的对角线,我的表的L-R,它会给我想象对角线右上角的所有值。
如果我修复I并循环通过j,它就会工作并返回整个第50行:
age=50
survivalcurve =
for j in age:ncol(FemaleBaseTable)
println(getindex(FemaleBaseTable, 50, j+1))
end
同样,如果我修复j并循环通过I,这将起作用并返回整个第j列:
age=50
survivalcurve =
for i in age:nrow(FemaleBaseTable)-1
println(getindex(FemaleBaseTable, i+1, 50))
end
我推测它会返回所有值,因为我使用的是age:nrow/age:ncol,但不确定只返回(I+1(,(j+1(值的合适替代品是什么。如果有任何帮助,我们将不胜感激!
您可以使用LinearAlgebra.jl
中的diag
或手动使用单个循环来收集从任何索引(i,j)
开始的对角元素。
假设你有:
nrows, ncols = 121, 137
FemaleBaseTable = rand(nrows, ncols)
# And the diagonal should start at any (i,j)
i, j = 50, 50
你可以使用
diag(@view FemaleBaseTable[i:end,j:end])
或者,
[FemaleBaseTable[i,i] for (i,j) in zip(i:nrows,j:ncols)]