比较两个数组时出错:DeprecationWarning:元素比较失败;这将在未来引发错误

如何解决比较两个数组时出错:DeprecationWarning:元素比较失败;这将在未来引发错误

我有一个形状为 a 的数组 (1000000,32) 和形状为 b 的数组 (10000,32)

我想找到包含 b 行的 a 的索引。 我写了以下代码

I = np.argwhere((a == b[:,None]).all(axis=2))[:,1]

当我在其他情况下测试它时,它工作得很好。但是对于我当前的数组,它给出了以下错误

...\Anaconda3\lib\site-packages\ipykernel_launcher.py:111: DeprecationWarning: elementwise comparison Failed; this will raise an error in the future.

AttributeError: 'bool' object has no attribute 'all'

知道错误的根源是什么吗?谢谢

解决方法

运行:

result = (a[:,np.newaxis] == b).all(-1).any(-1)

步骤:

  • a[:,np.newaxis] == b - “按元素”比较。第一和第二索引 - ab 行的索引,第三个索引 - 两行中的列索引。
  • ….all(-1) - a[i]b[j] (all 两行的元素相等)。
  • ….any(-1) - a[i]b任何行中是否有它的“对应物”。

要检查每个步骤的结果,请使用 2 个数组,例如最多 10 行和 2 列。

,
np.arange(a.shape[0])[np.isin(a,b).all(axis=1)]

>>> import numpy as np
>>> a=np.arange(60).reshape(10,6)
>>> a
array([[ 0,1,2,3,4,5],[ 6,7,8,9,10,11],[12,13,14,15,16,17],[18,19,20,21,22,23],[24,25,26,27,28,29],[30,31,32,33,34,35],[36,37,38,39,40,41],[42,43,44,45,46,47],[48,49,50,51,52,53],[54,55,56,57,58,59]])
>>> b=np.arange(24).reshape(4,6)
>>> b
array([[ 0,23]])
>>> np.arange(a.shape[0])[np.isin(a,b).all(axis=1)]
array([0,3])

当然 np.isin() 在文档 here 中并测试 a 的元素是否在 b 中。提问者已经熟悉 all()axis=1 参数的使用。因此,np.isin(a,b).all(axis=1) 生成一个布尔数组,该数组从 a 的索引中进行选择,该索引由 np.arange(a.shape[0]) 表示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?