繁体   English   中英

一维数组中 select 元素的二维索引

[英]2d index to select elements from 1d array

我正在尝试使用 2d boolean 数组( ix )从 1d 数组( c )中选择元素来创建 2d 数组( r )。 生成的二维数组也是 boolean 数组。 每列代表c中的唯一值。

例子:

>>> ix
array([[ True,  True, False, False, False,  False, False],
       [False, False,  True, False, False, False,  True],
       [False, False, False,  True, False, False, False]])
>>> c
array([1, 2, 3, 4, 8, 2, 4])

预期结果

          1,     2,     3,     4,     8
r = [
     [ True,  True, False, False, False], # c[ix[0][0]] == 1 and c[ix[0][1]] == 2; it doesn't matter that ix[0][5] (pointing to `2` in `c`) is False as ix[0][1] was already True which is sufficient.
     [False, False,  True,  True, False], # [3]
     [False, False, False,  True, False]  # [4] as ix[2][3] is True
    ]

这可以以矢量化的方式完成吗?

让我们试试:

# unique values
uniques = np.unique(c)

# boolean index into each row
vals = np.tile(c,3)[ix.ravel()]

# search within the unique values
idx = np.searchsorted(uniques, vals)

# pre-populate output
out = np.full((len(ix), len(uniques)), False)

# index into the output:
out[np.repeat(np.arange(len(ix)), ix.sum(1)), idx ] = True

Output:

array([[ True,  True, False, False, False],
       [False, False,  True,  True, False],
       [False, False, False,  True, False]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM