【问题标题】:python single element tuplepython单元素元组
【发布时间】:2018-04-25 04:37:27
【问题描述】:

假设我有一个矩阵M 和一个索引集idx=[(0,1),(2,3),(3,2)],我想创建两组元组idx_leq1,由第一个和第二个元素都小于或等于1 和@ 987654324@ 由第一个和第二个元素都大于或等于 2 的元组组成。

我想干净地访问元素 M[idx_leq1]M[idx_geq2]。我试过idx_leq1 = tuple([e for e in idx if e[0]<=1 and e[1]<=1]),但这会返回idx_leq1 = ((0,1),),我不能用它来索引M。另一方面,idx_geq2 = tuple([e for e in idx if e[0]>=2 and e[1]>=2]) = ((2,3),(3,2)) 有效。

如果我的第一个索引集仅包含一个坐标对,我该如何解决这个问题?我不想做M[idx_leq1[0]]

我可以做到:list(chain(*[(e,) for e in idx if e[0]<=1 and e[1]<=1]))list(chain(*[(e,) for e in idx if e[0]>=2 and e[1]>=2])),但是我仍然需要为 idx_leq1 获取第一个元素,而我可以将 idx_geq2 传递给 M 并获取相应的元素。

谢谢!

【问题讨论】:

  • 在我看来,第一个结果应该和第二个结果一样好。您是否以相同的方式对其进行迭代?在任何一种情况下,你都不能用元组的元组索引 M。
  • 第一种情况并没有给我返回M(0,0) 条目,而是像整个矩阵一样

标签: python indexing tuples


【解决方案1】:

[用numpy.mat测试]

[M[0, 1]] 应该像M[[0], [1]] 一样被获取。索引矩阵时,多维位置列表索引需要 k 个索引列表,每个列表使用一维。

例如,为了获取M[0, 3], M[1, 4], M[2, 5],应该使用M[[0, 1, 2], [3, 4, 5]]。换句话说,您给M 的索引不应被视为坐标列表。相反,它们是“每个维度上的坐标”的列表。
在您的情况下,M[[0, 1]](或其等效的元组类型)获取M[0], M[1],因为[0, 1] 被认为适用于第一个维度,而第二个维度被广播。

参考:http://scipy-cookbook.readthedocs.io/items/Indexing.html#Multidimensional-list-of-locations-indexing
该参考认为使用“dims 列表”而不是“坐标列表”的原因是为了节省实例数量,因为解包许多元组可能会很昂贵。

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2011-05-12
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多