2010-10-26 2 views
1

Je veux implémenter une fonction similaire, et je veux accepter un tableau ou un nombre que je passe à numpy.ones.Comment les zéros numpy implémentent-ils la forme du paramètre?

Plus précisément, je veux faire:

def halfs(shape): 
    shape = numpy.concatenate([2], shape) 
    return 0.5 * numpy.ones(shape) 

paires entrées-sorties Exemple:

# default 
In [5]: beta_jeffreys() 
Out[5]: array([-0.5, -0.5]) 

# scalar 
In [5]: beta_jeffreys(3) 
Out[3]: 
array([[-0.5, -0.5, -0.5], 
     [-0.5, -0.5, -0.5]]) 

# vector (1) 
In [3]: beta_jeffreys((3,)) 
Out[3]: 
array([[-0.5, -0.5, -0.5], 
     [-0.5, -0.5, -0.5]]) 

# vector (2) 
In [7]: beta_jeffreys((2,3)) 
Out[7]: 
array([[[-0.5, -0.5, -0.5], 
     [-0.5, -0.5, -0.5]], 

     [[-0.5, -0.5, -0.5], 
     [-0.5, -0.5, -0.5]]]) 
+0

Pourriez-vous expliquer plus ce que vous aimeriez accomplir? – eumiro

+0

J'ai mis à jour la question. –

+0

Vous donnez une forme à votre fonction et vous voulez ajouter une dimension (2) et remplir avec 0.5? – eumiro

Répondre

1
def halfs(shape=()): 
    if isinstance(shape, tuple): 
     return 0.5 * numpy.ones((2,) + shape) 
    else: 
     return 0.5 * numpy.ones((2, shape)) 



a = numpy.arange(5) 
# array([0, 1, 2, 3, 4]) 


halfs(a.shape) 
#array([[ 0.5, 0.5, 0.5, 0.5, 0.5], 
#  [ 0.5, 0.5, 0.5, 0.5, 0.5]]) 

halfs(3) 
#array([[ 0.5, 0.5, 0.5], 
#  [ 0.5, 0.5, 0.5]]) 
+0

Je l'ai maintenant édité et rendu optionnel, comme vous l'avez indiqué dans votre commentaire. Vous pouvez donc l'appeler avec 'halfs()' et retournera un tableau à 1 dimension de deux éléments 0,5. – eumiro

+0

Cela semble bien quand la forme est un tableau, mais cela ne fonctionne pas avec ints. Comment numpy accepte-t-il les tableaux ou les scalaires? –

+0

@Neil, vous devez écrire un exemple dans votre question d'origine avec exemple d'entrée et de sortie. – eumiro

Questions connexes