使用布尔numpy数组索引列表?

时间:2020-05-17 09:46:40

标签: numpy

谁能告诉我我做错了什么? 我从一个布尔数组创建了一个整数数组,但仍然不能将其用作列表的索引:

dataset = []
dataset.append({
                "a": "few",
                "b": "cd"
            })
dataset.append({
                "a": "fe",
                "b": "c"
            })
dataset.append({
                "a": "f",
                "b": "cwef"
            })

split = 0.5
# generate bolean mask
msk = np.random.rand(len(dataset)) < split 
print(msk)

# transform mask to int version
msk = np.where(msk)
print(msk)

# take only first part of touple as index mask
# ERROR:  only integer scalar arrays can be converted to a scalar index
dataset_low = dataset[msk[0]] 
dataset_high = dataset[~msk[0]]

1 个答案:

答案 0 :(得分:0)

该魔术仅适用于numpy数组,dataset是一个列表。

您可以将其转换为具有自定义数据类型的numpy数组。

并且仅在不使用np.where并坚持使用布尔数组的情况下才有效。

~的结果取反np.where没有意义,因为结果是索引,而不是布尔值。

...
#msk = np.where(msk)
...

dataset = np.array(dataset)
dataset_low = dataset[msk[0]] 
dataset_high = dataset[~msk[0]]
....