• Register

'Mul' object has no attribute 'cos'?

+4 votes
1,939 views
Ko ze importiram ustvarjeni modul v notebook seminar in želim dobiti rešitev, mi javi error 'Mul' object has no attribute 'cos'. Napaka se torej pojavi znotraj modul, kje imam uvozeno knjiznico numpy as np( uvoz je pravilen, saj mi ukaz 'np.pi' deluje normalno, tako kot mora). Napaka se pojavi pri ukazu np.cos, ki je uporabljen v enacbi znotraj funkcije. Nekaj o tem sem že bral na internetu in naj bi slo za to, da se med seboj 'prepirata' knjiznici sympy in numpy, in je tako interpreter (cosinus) zmeden, katero naj uporabi. Napako delno odpravim s tem, da poleg numpy knjiznice uvozim znotraj modula as sympy as sp, in potem namesto izraza np.cos uporabim sp.cos. V tem primeru mi potem ne javi vec errora in dobim resitev v notebook seminarju, vendar v simbolni obliki. Ker pa potrebujem numericno ( z numpy) me zanima, ce je kdo ze naletel na kaj podobnega, oz. ve kako resiti ta problem tako da obvelja knjiznica numpy.
asked Dec 29, 2015 by ZigaSkobir (200 points)
retagged Dec 29, 2015 by Marko Mihalec

5 Answers

+2 votes
SI poizkusi napisati modul samo v numerični obliki brez pomoči sympy-ja?
answered Dec 29, 2015 by tomi (1,180 points)
To je pravilna pot, saj se napaka največkrat pojavlja zaradi mešanja sympyja in numpyja.
Preveriti je treba tako definicijo modula, kakor tudi slovar podatkov, katerega se vstavi v modul
+2 votes
Ali lahko pripneš kodo, iz opisa problema je težko ugotoviti kaj bi lahko bil glavni vzrok
answered Dec 29, 2015 by Blaž Velkavrh (29,970 points)
0 votes
Sem pravkar pogruntal. Problem je bil v tem, da nism vredu importiru numpy ja tudi v notebooku, in mi ga zato ni zagnalo, interpreter je pa pol priklopu na sympy kateri je pa bil..Zdej ko sem to popravu dela tako kot mora.

Hvala!
answered Dec 29, 2015 by ZigaSkobir (200 points)
kako si pa potem importiral numpy ? imam isto težavo, pa sem v notebook napisal import numpy as np preden sem importiral svoj modul, pa mi še vedno javi Mul object has no attribute cos ??
Tako kot si sam napisal: 'import numpy as np' . To mors nardit in v modulu samem ter tudi v notebooku, pa pazi da si pred vsemi cos/sin znotraj modul pisal np. pol bi ti moglo delat.
sporoci
sem upošteval vse, ne dela.
Tudi sam sem imel letos enako težavo, ki sem jo odpravil tako kot je napisal Žiga. Lp
+1 vote
Če se pojavljajo težave pri kosinusih, sinusih, tangensih,.., lahko poskusiš tudi z modulom math. Zapis bi bil potem npr. math.sin() . Seveda pred tem importaš modul, enako kot numpy- import math
answered Dec 29, 2015 by JanJ (2,580 points)
stvar deluje, hvala !!
Me veseli, da deluje. Malenkost :)
Zanimiva debata; sem vesel! Bi pa bilo bistveno lažje slediti, če bi pri vprašanju in odgovorih uporabljali *minimalno kodo, ki pokaže problem*! (ne na dolgo opisovati)
0 votes

Imam enak problem kot je že opisan v tej temi, vendar mi kljub nekaj nasvetom vseeno ne uspe rešit problema. 

Kaj storiti?

koda napake:

'Mul' object has no attribute 'sin'
 
answered May 13 by matejjeklar (140 points)
Poskusite v celici novega jupyter notebook-a pognati tele vrstice kode:

import numpy as np
import sympy as sym
print(np.cos(0))
print(sym.cos(0))

Če koda deluje (in se vam torej pod celico dvakrat izpiše število 1, oziroma 1.0), potem je z vašim sistemom vse v redu, in gre za problem mešanja numpy in sympy višje v vaši kodi, kot je opisano zgoraj. V tem primeru preglejte vso kodo, v kateri uporabljate sympy. Posebej pozorni bodite na kaj takega:

from sympy import * # takih importov se izogibajte, bolje je sympy uvoziti s "psevdonimom" sym
np = sym... # tako bi recimo nek element Numpy knjižnjice zamenjali s Sympy objektom, kar lahko povzroči to napako

Vsekakor bi bilo dobro, da pripnete kodo, ki je sprožila vašo napako.
V novem notebooku mi pravilno izpiše  število 1 in 1.0.

Kopiram kodo, ki mi javi napako:
import numpy as np
import sympy as sym

odvod2 = sym.diff((8*sym.pi/t_k)*A*((sym.sin((2*sym.pi/t_k)*t))**3)*(sym.cos((2*sym.pi/t_k)*t)),t)
print(odvod2)
vrne rešitev: -16*pi**2*A*sin(2*pi*t/t_k)**4/t_k**2 + 48*pi**2*A*sin(2*pi*t/t_k)**2*cos(2*pi*t/t_k)**2/t_k**2

res_3 = -((16*(np.pi**2)/(t_k**2))*A*((np.sin((2*np.pi/t_k)*t))**4)) + ((48/(t_k**2))*(np.pi**2)*A*((np.sin((2*np.pi/t_k)*t))**2)*((np.cos((2*np.pi/t_k)*t))**2))
print(res_3)

vrne:'Mul' object has no attribute 'sin'
Predvidevam, da je `t` definiran kot Sympy simbol. To je problem v vaši kodi - ko poskušate izračunati:

np.sin((2*np.pi/t_k)*t)

računate `np.sin()` - torej numerični "sinus" Sympy simbola `t`, kar seveda ni OK. Če želite uporabljati numpy, morate `t` definirati drugače, kot če želite računati simbolno.
...