python - 减去两个不同形状的 np.ndarray
问题描述
不同形状的ndarray,较大的形状为(22470,2),看起来像这样
df1
array([[-0.39911392, 0.46759156],
[ 0.28343494, 0.88479157],
[-0.0114085 , -1.23768313],
...,
[-0.35930586, 0.54784439],
[-0.37994004, 0.51332771],
[-0.36309593, 0.49318486]])
代表 df1 数组异常值的小数组,其形状为 (675,2),看起来像这样
df2
array([[-0.04450032, 0.31053589],
[-0.4320086 , 0.14815988],
[-0.07948631, -1.32638555],
...,
[-0.32619787, 0.34910699],
[-0.50870225, -0.230849 ],
[-0.43532727, 0.49763502]])
所以试图减去他们两个有一个新的数组,其中包含除 df2 之外的 df1 中的所有内容,但它给了我这个错误
ValueError:操作数无法与形状一起广播 (22470,2) (675,2)
我怎样才能在 Python 中做到这一点?
解决方案
“减去”两个数组不会对数组执行集合操作,它只是从另一个数组的值中减去一个数组的值(即 4 - 3 => 1)。
你想要做的基本上是一个集合操作。没有简单直接的方法来做你想做的事,你如何呈现它(但这并不意味着它不能完成)。比较浮点数是否完全相等是一个坏主意,相反,您会发现收集异常值的索引数组而不是它们的值更有用。然后你可以像这个问题一样索引你的数组。
所以这将是这样的
df1 = array([[1.234, 2.345], [3.3452, 2.456], [5.234, 7.453]])
# This is an array of indices, not float values.
df2 = array([1])
keep = np.ones(len(df1), dtype=bool)
keep[df2] = 0
newdf = df1[keep]
# newdf: [[1.234, 2.345], [5.234, 7.453]]
推荐阅读
- git - Git cherry-pick - 如何在不实际执行任何操作的情况下显示更改
- c# - 为 .NET 5/6 win 表单实现托盘图标上的菜单
- ktor - Ktor 中的特殊字符解析
- python-3.x - ManimGL 错误找不到滤芯
- sql-server - 如何指定 SQL 固定日期以在所有国家/地区/语言中工作
- telegram - 如何知道用户从哪里开始聊天?来自内部组还是直接来自内部机器人?
- javascript - iframe 中的不可见边框
- arrays - 出现错误:二元运算符“==”不能应用于两个“x”操作数,如何删除此对象数组中的某些元素
- cumsum - 从1开始计算每组因子的连续数字序列
- laravel - 在雄辩的 Where 子句中使用类似通配符的语法在两个字符串之间进行搜索