2012-09-25 8 views
9

Jeśli uruchomić następujący kod:TypeError generowany podczas korzystania z operacji na miejscu na numpy tablic?

import numpy as np 

b = np.zeros(1) 
c = np.zeros(1) 
c = c/2**63 

print b, c 
b += c 

otrzymuję komunikat o błędzie:

TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided 
output parameter (typecode 'd') according to the casting rule ''same_kind'' 

Jeśli zmienię b += c do b = b + c, kod działa poprawnie. Dlaczego tak jest? Używam Python 2.7.2 na RHEL.

wersja NumPy: 2.0.0.dev-a2a9dfb wersja

GCC: 4.1.2 20.080.704 (Red Hat 4.1.2-52)

Z góry dziękuję.

+2

Proszę napisać swoją numpy wersję ('print np.version.version') i swoją' gcc --version' (z powłoki), ponieważ potrzebujemy informacji do raportu o błędzie. –

+1

Podobnie miałem ten problem z '/ ='. Dzięki za Twój wpis, rozwiązany. –

Odpowiedz

9

Kiedy robisz c=c/2**63, c dostaje lanego do dtype=object (to jest problem), natomiast b pobytów z dtype=float.

Po dodaniu tablicy dtype=object do dtype=float, wynikiem jest tablica dtype=object. Pomyśl o tym jako o precedensie, tak jak przy dodawaniu numpy float do numpy int daje numpy float.

Jeśli spróbujesz dodać object do floatw miejscu, to się nie powiedzie, a wynik nie może być odlany z object do float. Podczas korzystania z podstawowego dodatku, takiego jak b=b+c, wynik b jest rzutowany na dtype=object, jak być może zauważyłeś.

Należy pamiętać, że używanie c=c/2.**63 zachowuje c jako zmienną i b+=c działa zgodnie z oczekiwaniami. Zauważ, że gdyby c był np.ones(1), nie miałbyś problemu również.

W każdym razie: (np.array([0], dtype=float)/2**63)).dtype == np.dtype(object) to prawdopodobnie błąd.

+0

Nie jestem pewien, czy to błąd. Może - ale '2 ** 63' jest większy niż maksymalna wartość' int64', więc nie jestem pewien, czy 'numpy' ma sens, aby zrobić coś innego niż przechowywać go w tablicy obiektów Pythona. – senderle

+0

Tyle tylko, że 'long' ma niższy priorytet niż' float'. –

+0

Tak, i nawet nie mogę odtworzyć problemu z OP. – senderle

Powiązane problemy