首页 > 解决方案 > 使用布尔 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]]

标签: numpy

解决方案


这种魔法只适用于 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]]
....

推荐阅读