2017-06-14 1 views
1

L'objectif est de traiter des densités cellulaires exprimées en "1000/mm^3", c'est-à-dire des milliers par millimètre cube.Comment spécifier un multiplicateur scalaire pour les unités lors de l'utilisation de Quantités?

Actuellement, je le fais pour gérer "1/mm^3":

import quantities as pq 
d1 = pq.Quantity(500000, "1/mm**3") 

qui donne:

array(500000) * 1/mm**3 

Mais ce que je dois vraiment faire est d'accepter les valeurs avec les unités de "1000/mm^3". Cela devrait également être la forme sous laquelle les valeurs sont imprimées. Lorsque je tente quelque chose comme:

d1 = pq.Quantity(5, 1000/pq.mm**3) 

que je reçois l'erreur suivante:

ValueError: units must be a scalar Quantity with unit magnitude, got 1000.0 1/mm**3 

Et si je tente:

a = pq.Quantity(500, "1000/mm**3") 

La sortie est:

array(500) * 1/mm**3 

-à-dire Le 1000 est simplement ignoré. Une idée comment puis-je résoudre ce problème? Une solution de contournement?

(L'exigence découle de la pratique courante suivie dans le domaine.)

Répondre

1

Une solution possible, je l'ai trouvé est de créer de nouvelles unités comme celui:

k_per_mm3 = pq.UnitQuantity('1000/mm3', 1e3/pq.mm**3, symbol='1000/mm3') 
d1 = pq.Quantity(500, k_per_mm3) 

ensuite sur l'impression « d1 » , Je reçois:

array(500) * 1000/mm3 

ce qui est ce que j'avais besoin.

Est-ce la seule façon de faire cela? Ou peut-on en faire de même avec des unités existantes (ce qui est préférable)?