[英]python single element tuple
假设我有一个矩阵M
和一个索引集idx=[(0,1),(2,3),(3,2)]
,我想创建两组元组, idx_leq1
由第一和第二个元组组成元素均小于或等于1,并且idx_geq2
由第一和第二个元素均大于或等于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
并获取适当的元素。
谢谢!
[使用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#MultiDimension-list-of-locations-indexing
该参考资料认为,使用“暗角列表”而不是“坐标列表”的原因是为了节省实例数,因为解包许多元组可能很昂贵。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.