python读取列表指定列_python–如何获取⼆维数组中指定列的
唯⼀⾏索引
如果我有像这样的numpy索引….
import numpy as np
a = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1],
])
如何到⼀个或多个指定列中的值唯⼀的⾏的索引?我的意思是……如果我将列指定为“掩码”,我如何使⽤该列作为掩码到唯⼀的⾏?例如,如果我想……
相对于列0的唯⼀⾏(第0列是掩码).我想要这样的回报….
[[0,1],[2,3]]
因为如果要使⽤列0作为唯⼀性的标准,则⾏0和1将位于相同的“唯⼀组”中,⽽⾏2和3将位于另⼀个“唯⼀组”中,因为它们在列0中具有相同的值.
如果我想要相对于第1列(第1列现在是掩码)的⾏,我希望有这样的输出….
[[0,2],[1,3]]
因为使⽤第1列作为唯⼀性标准会导致⾏0和2以及第1⾏和第3⾏位于各⾃独⽴的组中,因为它们在第1列中具有相同的值
我还希望能够获得关于多个列的唯⼀⾏所以如果我想要关于列0和1的唯⼀⾏(现在列0和1都是掩码),我希望这个返回.. ..
[[0],[1],[2],[3]]
因为当您使⽤两列作为唯⼀性标准时,有四个唯⼀的⾏.
在numpy中有⼀个简单的⽅法吗?谢谢.
最佳答案 这是⼀个⾃定义解决⽅案,当然不会⾮常⾼效,因为它会进⾏⼤量复制并直接遍历矩阵:
def groupby(a, key_columns):
from collections import defaultdict
groups = defaultdict(list)
for i, row in enumerate(a):
groups[tuple(row[c] for c in key_columns)].append(i)
python获取数组长度return groups.values()
这假设key_columns是⼀个列表或元组,其中包含您有兴趣进⾏分组的相应列.您还可以执⾏⼀些参数检查并将单个索引提升为单个列表.
运⾏以下⽰例会产⽣以下输出:
>>> groupby(a, [0])
[[0, 1], [2, 3]]
>>> groupby(a, [1])
[[0, 2], [1, 3]]
它也适⽤于您问的多个键列:
>>> groupby(a, [0, 1])
[[1], [2], [0], [3]]
请注意,在这种情况下,由于使⽤了defaultdict,因此⽆法保证值的顺序.您可以对结果值进⾏排序,也可以使⽤collections.OrderedDict,具体取决于您计划如何使⽤⼆级索引.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论