【问题标题】:Efficient element-wise multiplication in Python with numpy arrayPython中使用numpy数组的高效逐元素乘法
【发布时间】:2015-06-24 22:40:58
【问题描述】:

我有一个 np.int64 类型的 numpy 数组,我正在尝试对其应用公式。

假设该数组是一个名为total_img 的二维数组,其尺寸为 400 X 300 像素。对于每个像素,我想计算以下公式。 px = 255*(min - px)/(min - max)。我希望这些重新缩放的像素始终存储在total_img 中。如何使用 numpy 数组有效地实现这一点?

注意,minmax 只是第 1 个百分位数和第 99 个百分位数的值,实际上存储为浮点数。我是否应该将它们转换为整数以获得更好的准确性(记住 total_img 的类型为 np.int64 - 永远不会发生溢出)。 min 也很可能是负数。

我正在使用:

for row in total_img:
    for px in row:        
        px = 255*(min-px)/(min - max)

【问题讨论】:

  • 你不应该隐藏诸如 min/max 之类的内置函数......只是一个与你的问题完全无关的旁白

标签: python arrays numpy integer-overflow


【解决方案1】:
total_img = 255*(min - total_img)/(min - max)

您实际上只是插入total_img 而不是px,它会按元素进行操作。如果您想将结果存储到原始的total_img 中而不是替换它,您可以切片分配:

total_img[:] = 255*(min - total_img)/(min - max)

但请注意,这实际上并没有节省任何时间或内存。

【讨论】:

    【解决方案2】:

    我相信你可以直接这样做:

    total_img = 255*(min-total_img)/(min - max)
    

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2014-11-13
      • 1970-01-01
      • 2015-05-13
      • 2016-03-15
      • 2018-10-23
      • 2022-09-22
      • 2015-07-17
      • 2016-08-11
      相关资源
      最近更新 更多