1472580
1472580

Reputation: 163

How can I use Numba "@vectorize" ufunc with a structured Numpy array?

I'm unable to get a vectorized ufunc to run. Regular @njit works fine and the @vectorize documentation suggests that the vectorize decorators are the same as njit. I'm running on Windows 10, if that makes a difference

The demo program is as follows. From the output below that we can see that the njit function runs without incident and there's a type error with the vectorized function.

import sys
import numpy
import numba

Structured = numpy.dtype([("a", numpy.int32), ("b", numpy.float64)])
numba_dtype = numba.from_dtype(Structured)

@numba.njit([numba.float64(numba_dtype)])
def jitted(x):
    x['b'] = 17.5
    return 18.

@numba.vectorize([numba.float64(numba_dtype)], target="cpu", nopython=True)
def vectorized(x):
    x['b'] = 17.5
    return 12.1

print('python version = ', sys.implementation.version)    
print('numpy version = ', numpy.__version__)
print('numba version = ', numba.__version__)
for struct in numpy.empty((3,), dtype=Structured):
    print(jitted(struct))

print(vectorized(numpy.empty((3,), dtype=Structured)))

And the output is

python version = sys.version_info(major=3, minor=7, micro=1, releaselevel='final', serial=0)
numpy version = 1.17.3
numba version = 0.48.0
18.0
18.0
18.0
Traceback (most recent call last): File "scratch.py", line 49, in
print(vectorized(numpy.empty((3,), dtype=Structured))) TypeError: ufunc 'vectorized' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Upvotes: 3

Views: 709

Answers (1)

1472580
1472580

Reputation: 163

It looks like this is not supported, has been converted to a feature request

Upvotes: 3

Related Questions