Похоже, вы пытаетесь создать новый тип d например. двойные числа. Это можно сделать с помощью следующего кода:
dual_type = np.dtype([("a", np.float), ("b", np.float)])
dual_array = np.zeros((10,), dtype=dual_type)
Однако это просто способ хранения типа данных, который ничего не говорит о специальной алгебре, которой он подчиняется.
Вы можете частично достичь желаемого эффекта, создав подкласс numpy.ndarray
и переопределив соответствующие функции-члены, такие как __mul__
для умножения и т. Д. Это должно хорошо работать для любого кода на Python, но я вполне уверен, что любые подпрограммы на основе C или Fortran (то есть большинство numpy и scipy) будут умножать числа напрямую, а не вызывать __mul__
. Я подозреваю, что convolve
попадет в эту корзину, поэтому он не будет соблюдать правила, которые вы определяете, если вы не написали свою собственную версию на чистом Python.