quantities.Quantity
является подклассом numpy.ndarray
, который обрабатывает арифметические операции и преобразования физических величин. Как я могу использовать его арифметику без подклассификации? Следующий подход использует __array__
-метод - но только работает на 80%, как вы можете видеть в конце:Как добавить `quantity.Quantity`-поведение без подкласса его с помощью` __array__`?
class Numeric(object):
def __init__(self, signal):
self.signal = signal
self._dimensionality = self.signal._dimensionality
self.dimensionality = self.signal.dimensionality
def __array__(self):
return self.signal
def __mul__(self, obj):
return self.signal.__mul__(obj)
def __rmul__(self, obj):
return self.signal.__rmul__(obj)
С этим я могу сделать:
import quantities as pq
import numpy as np
num = Numeric(pq.Quantity([1,2,3], 'mV'))
q = pq.Quantity([2,3,4], 'mV')
n = np.array([3,4,5])
Все из следующих операций возврата правильный блок - , за исключением последнего, там блок отсутствует:
print num * num
# [1 4 9] mV**2
print num * q
# [ 2 6 12] mV**2
print num * n
# [ 3 8 15] mV
print q * num
# [ 2 6 12] mV**2
print n * num
# [ 3 8 15] <------- no unit!
Любая идея, что исправить, чтобы сохранить правильное Ед. изм?
редактировать: Возвращение тип/значение в arithmentic opperation должно быть эквивалентно:
num.signal * num.signal
num.signal * q
num.signal * n
q * num.signal
n * num.signal # this doesn't work
Если вы ищете пакет Python блоков с большой поддержкой NumPy, но без необходимости NumPy работать, принимать посмотрите на http://pint.readthedocs.org/ (Отказ от ответственности: я один из авторов) – Hernan