python - 将 numpy.set1d 推广到 nd-arrays
问题描述
我正在尝试在 nd-arrays 上使用 numpy 的 setdiff1d 函数:
import numpy as np
#a,b being ndarrays
in_a_not_b = np.setdiff1d(a,b)
但它不起作用,因为它在工作 nd-array 元素方面是明智的。
例如,如果:
a = [[1,2,3],[4,5,6]]
b = [[7,2,3],[4,5,6],[7,8,9]]
我希望输出为:
[[1,2,3]]
但这里是:
[1]
有没有一种简单的方法可以将 setdiff1d 推广到 nd-arrays ?
解决方案
您可以将数组相互广播,以使最后一个维度对齐,然后检查最后一个轴的所有元素是否相等,并且第二个到最后一个轴中的至少一个元素是这种情况(数组检查):
mask = a[:, None, :] == b[None, :, :]
mask = mask.all(axis=-1).any(axis=-1)
result = a[~mask]
元素的顺序在这里很重要,所以如果不应该,那么您需要沿最后一个轴对数组进行排序。
推荐阅读
- typescript - Typescript 使用派生类作为方法的返回类型
- ruby-on-rails - Ruby on rails:如何从机架中间件身份验证中排除某些路径?
- laravel - 如何在 Laravel 中为用户显示相应的登录页面?
- postgresql - “QueryFailedError:整数的输入语法无效:”查询浮点类型时
- azure-devops - 解决 UserStory 时自动化,将视频从附件上传到 Yammer 作为新帖子作为附件。美国的标题将是内容
- html - 找不到未禁用的字段“player_1_name”
- entity-framework - 将 SQL 命令转换为 lambda 表达式
- javascript - 二进制数据文件下载 JavaScript 中的任何扩展
- azure - 提醒我如何从函数应用程序向销售人员对象发送数据?
- outlook - 如何在主题文本框下方的 Outlook 电子邮件撰写窗口中添加带有自定义文本的自定义代码/标签?