首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有Python或Julia中的数组库支持数组切片和次切片

是否有Python或Julia中的数组库支持数组切片和次切片
EN

Stack Overflow用户
提问于 2022-08-03 13:10:49
回答 1查看 61关注 0票数 0

在某些数据结构(矩阵)中,您可能希望能够通过多个标签对矩阵进行切片,或者至少有标记的切片,而不是按索引进行切片。

例如,假设我们有一个矩阵描述公司之间的支付。列是支出(支付者),行是(收入)接受者。矩阵是正方形的,因为每个公司都是沿着两个轴上市的。对角线是零,因为一家公司不为自己付钱(理论上)。

然而,现在您想要按部门(制造业、农业)划分这个矩阵,以找到农业支付子矩阵。或者,你可能想分得更小一些,看看制造业给粮食公司带来了多少报酬。在这两种语言中,是否有一个能够以整洁和可读的方式标记切片的包?

理论切片语法

代码语言:javascript
复制
# Slicing array for agriculture
payments[payments.expenditures.agriculture, payments.incomes.agriculture]

# Slicing for manufacturing payments to agriculture->grain specifically
payments[payments.expenditures.manufacturing, payments.incomes.agriculture.grain]

在这种情况下,payments.expenditures.manufacturing大概是14:18 (制造业中总共有3家公司),而payments.incomes.agriculture.grain则是7:8 (总共有1家公司)。但是上面的语法比payments[14:18, 7:8]更具可读性。

理论上你可以在你的切片中有n级的层次结构。从工业分类到特定的产品。

想知道在Python或Julia中是否有任何方法可以做到这一点?

或者我需要自己写这样的东西,我认为可以用一个树状的数据结构来完成,这个结构包含了每个节点的索引范围。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 07:34:05

JuMP.Containers正是您所要求的功能。您可以定义具有自定义索引的数组,然后对它们进行切片。

代码语言:javascript
复制
julia> using JuMP.Containers

julia> a = DenseAxisArray(rand(3,3),[:a,:b,:c],[:d,:e,:f])
2-dimensional DenseAxisArray{Float64,2,...} with index sets:
    Dimension 1, [:a, :b, :c]
    Dimension 2, [:d, :e, :f]
And data, a 3×3 Matrix{Float64}:
 0.894139  0.797912  0.594439
 0.849874  0.916928  0.716711
 0.804051  0.320512  0.739498

julia> a[:b, :]
1-dimensional DenseAxisArray{Float64,1,...} with index sets:
    Dimension 1, [:d, :e, :f]
And data, a 3-element Vector{Float64}:
 0.849874338245389
 0.9169276864574099
 0.7167114738439391
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73222342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档