不同形状的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]])
因此尝试将它们都减去以得到一个新数组,其中包含df1中除df2之外的所有内容,但这给了我这个错误
ValueError:操作数不能与形状(22470,2)(675,2)一起广播
如何在Python中做到这一点?
答案 0 :(得分:1)
“减去”两个数组不会对该数组执行设置操作,它只是从另一个数组的值中减去一个数组的值(即4-3 => 1)。
您要做的基本上是一个设置操作。没有简单直接的方法可以完成您想要的事情,如何展示它(但这并不意味着它无法完成)。比较浮点数以实现完全相等是一个坏主意,相反,您会发现,收集离群值的索引数组而不是其值会更加有用。然后,您可以像this question那样索引数组。
所以这就像
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]]