【问题标题】:subtract two np.ndarray with different shapes减去两个不同形状的 np.ndarray
【发布时间】:2020-09-02 21:16:17
【问题描述】:

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

【问题讨论】:

  • 您的预期输出是什么?我不明白你的减法应该如何工作
  • @RichieV 例如如果 df1=[ [1,2],[2,2],[3,6]] 和 df2=[2,2] 如果我减去它们或者我不知道减法是否正确我希望结果是这样的 dfnew=[1,2],[3,6]]
  • 检查这个answer 找到LEFT-Excluding 你应该被设置
  • 您使用的是什么函数或运算符? df1-df2 还是别的什么?

标签: python numpy


【解决方案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]]

【讨论】:

  • 对不起,减法是一个错误的术语我不想同时减去两个数组我不会创建一个包含除 df2 数组之外的所有内容的新数组,例如 if df1=array([ [1,2 ],[2,2],[3,6]]) 和 df2=array([2,2]) newdf 将是 new=array([1,2],[3,6])
  • 是的,我明白这一点,这就是我的回答。我会更新答案更清楚
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2019-11-09
相关资源
最近更新 更多