numpy - Numpy where 与数组比较
问题描述
我有一个名为的数组Y
,其中包含类标签。我想找到与列表实验室指定的多个值匹配的 Y 的所有索引。
在这种情况下:
Y = np.array([1,2,3,1,2,3,1,2,3,1,2,3])
labs = [2,3]
我怎么能做这样的事情np.where(Y == labs)
返回
array([1,2,4,5,7,8,10,11])
我知道一种可能性是遍历列表实验室并进行元素比较。但我正在寻找一种更加基于 pythonic/numpy 的解决方案,它可以避免循环。
解决方案
您可以在此处的 [ np.where(..)
numpy-doc]上使用np.isin(..)
[numpy-doc]:
>>> np.where(np.isin(Y, L))[0]
array([ 1, 2, 4, 5, 7, 8, 10, 11])
将为我们.isin(Y, L)
提供一个数组,True
其中False
的项目Y
与 中的元素匹配L
:
>>> np.isin(Y, labs)
array([False, True, True, False, True, True, False, True, True,
False, True, True])
并且np.where(..)
我们将True
s 映射到相应的索引。
正如@hpaulj所说,对于 small L
s,我们可以这样写:
np.any([Y == li for li in labs],axis=0)
在这里,对于 中的每个元素labs
,我们将检查是否Y
是该元素,并使用np.any(..)
在它们之间创建“逻辑 OR 链”以将其折叠为布尔值。
推荐阅读
- logging - 维护 LOG 文件 - Tableau 中的 ODBC 连接到 Snowflake
- python - 如何使用 jira-python 在多用户选择器字段中添加(附加)用户
- database - 查询中的 MS Access:您输入的表达式包含无效语法
- python - 如何在熊猫数据框单元格中设置一个 numpy 数组?
- pip - 将包从 devpi-server 迁移到 nexus3
- python - python将图像压缩到特定的大小
- node.js - .on 不是函数
- r - Bash/R 在一个巨大的表中搜索列
- python - python中的函数实际上是如何工作的?
- javascript - 星期六选择日历时更改了时间段