I'm addicted to how to use the python scientific calculation module numpy function vectorize, so a memo for myself By the way, this time I posted this article using the histogram creation of the input image as an example in image processing.

Vectorize is a function that transforms a python function so that a list can be inserted into a function that takes a value as an argument. Each value of the input array will be calculated as an argument, and the return value will be vectorized.

First, prepare a function whose return value is not a list.

`myfunc.py`

```
def myfunc(a,b):
return a+b
print myfunc("hoge","Hoge")
```

The output looks like this:

```
"hogeHoge"
```

Consider plunging a vector into this myfunc.

`myfunc.py`

```
def myfunc(a,b):
return a+b
list = ["hoge","fuga"]
print myfunc(list,"Hoge")
```

I want the output to look like this:

```
["hogeHoge","fugaHoge"]
```

But in reality

```
TypeError: can only concatenate list (not "str") to list
```

Will be. This is because it was not originally defined to take a list as an argument. However, you can get the expected output by vectorizing myfunc with numpy.vectorize.

```
vfunc=numpy.vectorize(myfunc)
print vfunc(list,"Hoge")
```

The output is

```
["hogeHoge","fugaHoge"]
```

The list is returned. Now the vectorization of the function has been achieved.

I will leave a more practical example. Create a function that creates a histogram of the input image by image processing.

```
import numpy as np
import cv2
from matplotlib import pyplot as plt
#Function for creating a histogram
def img_hist(src,bins_array):
x = np.where(src==bins_array,1,0)
count = np.count_nonzero(x)
return count
#Vectorization
vhist = np.vectorize(img_hist)
vhist.excluded.add(0) #The 0th argument is passed to the function as it is as a fixed vector
#Prepare source file and histogram bin
src = cv2.imread("origin/LENNA.pgm",flags=0)
bins_array = np.arange(256)
#Create a histogram
hist_array=vhist(src,bins_array)
#Visualize the histogram
plt.plot(bins_array,hist_array)
plt.show()
```

The input image is a classic one

As a result, the following histogram is obtained.

- I was able to organize how to use numpy.vectorize.
- It is quite convenient and should be applicable in various ways. You can program without using for loops as much as possible.

Recommended Posts