减去两个具有不同形状的np.ndarray

时间:2020-09-02 21:16:17

标签: python numpy

不同形状的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中做到这一点?

1 个答案:

答案 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]]