gpt4 book ai didi

python - Numpy:多个值的矢量化

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:41 25 4
gpt4 key购买 nike

假设您有一个 RGB 图像并且想要处理每个像素:

import numpy as np
image = np.zeros((1024, 1024, 3))

def rgb_to_something(rgb):
pass

vfunc = np.vectorize(rgb_to_something)
vfunc(image)

vfunc 现在应该获取每个 RGB 值。问题是 numpy 使array 和函数在应该获取时获取 r0, g0, b0, r1, g1, b1, ...rgb0, rgb1, rgb2, ...。这能以某种方式完成吗?

http://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html

也许事先将 numpy 数组转换为某种特殊数据类型?

例如(当然不行):

image = image.astype(np.float32)
import ctypes
RGB = ctypes.c_float * 3
image.astype(RGB)
ValueError: shape mismatch: objects cannot be broadcast to a single shape

更新:这里的主要目的是提高效率。非矢量化版本可能看起来像这样:

import numpy as np
image = np.zeros((1024, 1024, 3))
shape = image.shape[0:2]
image = image.reshape((-1, 3))
def rgb_to_something((r, g, b)):
return r + g + b
transformed_image = np.array([rgb_to_something(rgb) for rgb in image]).reshape(shape)

最佳答案

解决这类问题的简单方法是将整个数组传递给函数,并在其中使用矢量化习语。具体来说,你的rgb_to_something也可以这样写

def rgb_to_something(pixels):
return pixels.sum(axis=1)

这比你的版本快大约 15 倍:

In [16]: %timeit np.array([old_rgb_to_something(rgb) for rgb in image]).reshape(shape)
1 loops, best of 3: 3.03 s per loop

In [19]: %timeit image.sum(axis=1).reshape(shape)
1 loops, best of 3: 192 ms per loop

np.vectorize 的问题在于,当应用于大型数组时,它必然会产生大量 Python 函数调用开销。

关于python - Numpy:多个值的矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9700699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com