【问题标题】:Fastest solution for general padded addition in numpynumpy中一般填充添加的最快解决方案
【发布时间】:2021-06-10 19:20:51
【问题描述】:

我需要相互添加 2 个可变大小的暗淡数组。有很多方法可以做到这一点!

典型的大小是几千乘几百(因为这可能会影响缩放!)。需要进行数十万次这样的添加。在我的例子中,第一个维度保证是相同的,但是子数组是可变长度的。

工作更小的例子:

a = np.ones(shape=(20,20))
b = np.ones(shape=(20,18))
c = a+b # Expected error

b.resize(a.shape)
c = b+c # This works!

有更快的方法吗?我对上面的其他 pythonic 解决方案感兴趣,但也对不管复杂性如何可能真正最快的解决方案感兴趣(这种项目主要以速度为王,但不如用 C 语言编写)。

【问题讨论】:

  • 我不认为调整大小正在做你认为的事情
  • 您需要通过添加不同大小的数组来非常仔细地指定您的实际含义。否则,您也可以将随机数相加。
  • resize 方法是就地的,因此相对较快,但它的使用非常有限。但要密切注意它是如何填充数组的。

标签: python-3.x performance numpy addition zero-padding


【解决方案1】:

如果您不介意更改 a,您可以这样做

a[:, :b.shape[1]] += b

我怀疑这会比填充 b 然后添加更快,但这样的事情需要用真实数据进行测试。

【讨论】:

  • 非常漂亮!我认为您的方法更清洁,并且可能更快,因为您不需要调用外部函数。我正在删除我的大声笑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多