2014-10-21 10 views
5

Próbuję obliczyć 8th pierwiastek kwadratowy z wartości lub jego^1/8, ale numpy jest zawsze wracać błędną wartośćJak mogę calc pow frakcje lub nth root square w numpy?

temp = 141.18 
h2 = temp ** (1/8) 
h2_ = np.power(temp, (1/8)) 

moje wyjście jest zawsze 1,0. Próbowałem również polecenia kwadratowego. Potrzebuję używać numpy, używam innych numpy tablic w mycode, tylko po to, aby zachować kompatybilność.

+2

może możesz spróbować z '1./8.'? !! – Dalek

Odpowiedz

4
>>> 1/8 
0 
>>> 1./8 
0.125 

I oczywiście, wszystko do potęgi 0 wyników w 1.

0

Rozumieć wieży numerycznej.

Reguła 1: Przy dwóch operandach tego samego typu, wynik będzie miał ten typ.

np. int/int = int

temp**(1/8) nie daje 8th korzeń temp ponieważ:

>>>1/8 
0 

Zasada 2: Jeśli argumenty są mieszane, jeden z nich będzie zmuszona na wieżę numerycznej: integer -> racjonalne -> float -> złożone.

np. unosić/int = unosić

>>>1./8 # 1. is a float 
0.125 

Uwaga: Mogą wystąpić przypadki, w których przepisy te nie mają zastosowania do prawdziwego podziału podział/i podłogi // ale nie w pełni je zrozumieć. Zobacz link.

"Zrobili studia, które znasz, działają w 60% przypadków ... za każdym razem." - Brian Fantana

Pułapka: W PO wątpliwość ekspresją temp**(1/8) jest wykonana z mieszanych argumentów (temp jest pływak), więc dlaczego nie jest (1/8) pływaka?

Argumenty są oceniane według BODMAS/BIDMAS tak (1/8) oceniano najpierw otrzymaną ekspresji staje temp**0 w tym momencie 0 jest zmuszany do pływaka.

Wszelkie pozytywne int lub float do potęgi 0.0 jest 1.0.