Skip to content Skip to sidebar Skip to footer

Redefine *= Operator In Numpy

As mentioned here and here, this doesn't work anymore in numpy 1.7+ : import numpy A = numpy.array([1, 2, 3, 4], dtype=numpy.int16) B = numpy.array([0.5, 2.1, 3, 4], dtype=numpy.fl

Solution 1:

You can use np.set_numeric_ops to override array arithmetic methods:

import numpy as np

def unsafe_multiply(a, b, out=None):
    return np.multiply(a, b, out=out, casting="unsafe")

np.set_numeric_ops(multiply=unsafe_multiply)

A = np.array([1, 2, 3, 4], dtype=np.int16)
B = np.array([0.5, 2.1, 3, 4], dtype=np.float64)
A *= B

print(repr(A))
# array([ 0,  4,  9, 16], dtype=int16)

Solution 2:

You can create a general function and pass the intended attribute to it:

def calX(a,b, attr):
    try:
        return getattr(numpy, attr)(a, b, out=a, casting="unsafe")
    except AttributeError:
        raise Exception("Please enter a valid attribute")

Demo:

>>> import numpy
>>> A = numpy.array([1, 2, 3, 4], dtype=numpy.int16)
>>> B = numpy.array([0.5, 2.1, 3, 4], dtype=numpy.float64)
>>> calX(A, B, 'multiply')
array([ 0,  4,  9, 16], dtype=int16)
>>> calX(A, B, 'subtract')
array([ 0,  1,  6, 12], dtype=int16)

Note that if you want to override the result you can just assign the function's return to the first matrix.

A = calX(A, B, 'multiply')

Post a Comment for "Redefine *= Operator In Numpy"