π
<-
Chat plein-écran
[^]

quelques fonctions d'arithmétique

Re: quelques fonctions d'arithmétique

Message non lude Adriweb » 21 Fév 2018, 14:57

Je le vois "souvent" sur des strings, mais après tout ça doit dépendre du type d'algo que l'on fait... sur des maths, probablement que c'est courant sur des listes en effet.
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: quelques fonctions d'arithmétique

Message non lude Bisam » 21 Fév 2018, 19:31

La "multiplication" de listes (ou de chaines de caractères) est un raccourci facile, mais je doute qu'il soit très utilisé, même parmi ceux qui adorent la syntaxe "Pythonnesque".

Malheureusement, c'est plus difficile à remplacer, pour au moins deux raisons :
1) La syntaxe permet aussi bien d'écrire 5*l que l*5 où l est une liste... et renvoie le même résultat dans chacun des deux cas. Cela oblige à tester le type des deux variables, si c'est le parseur qui fait le remplacement.
2) On est obligé de remplacer par une boucle (ou par les pseudo-boucles que sont les descriptions de liste dites en "compréhension").
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude parisse » 21 Fév 2018, 21:00

Pour le moment je mets un warning si c'est utilise dans Xcas en mode Python, en conseillant d'utiliser concat(seq(list,n)) mais ca ne sera pas compatible avec du vrai Python, alors que le warning list1.extend(list2) en cas d'addition de listes va marcher pour les deux. S'il n'y a pas de version Python sans ecrire * je ne peux pas creer la meme fonction dans Xcas, dommage.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.1%
 
Messages: 3497
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude rentech7289 » 18 Sep 2021, 22:34

D'ailleurs, c'est bizarre... Comment un tableau de longueur N rempli de 0 et de 1 peut-il prendre moins de N bits en mémoire ? Pire encore, comment se fait-il qu'un tableau numpy de type booléen prenne toujours 80 octets, quelque soit sa taille ?

Par compression algorithmique. Parce que certaines parties se répètent. Il est plus efficace de les stocker en mémoire dans une structure de données est de les sortir quand on en a besoin...
Avatar de l’utilisateur
rentech7289
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 66.4%
 
Messages: 107
Inscription: 16 Aoû 2021, 02:40
Localisation: Lorraine luxembourgeoise
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude parisse » 19 Sep 2021, 07:38

rentech7289 a écrit:
D'ailleurs, c'est bizarre... Comment un tableau de longueur N rempli de 0 et de 1 peut-il prendre moins de N bits en mémoire ? Pire encore, comment se fait-il qu'un tableau numpy de type booléen prenne toujours 80 octets, quelque soit sa taille ?

Par compression algorithmique. Parce que certaines parties se répètent. Il est plus efficace de les stocker en mémoire dans une structure de données est de les sortir quand on en a besoin...

Ben non, il est bien sur impossible de stocker un tableau de booleens decrivant si un nombre est premier ou pas en 80 octets! J'ai explique la raison ici https://tiplanet.org/forum/viewtopic.php?f=100&t=21065#p227217
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.1%
 
Messages: 3497
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude rentech7289 » 19 Sep 2021, 13:35

La mémoire d'un tableau numpy est obligatoirement dans l'espace de visibilité de python puisque c'est une bibliothèque python. Comment python peut-il récupérer de la mémoire allouée par une de ses bibliothèque s'il n'a aucune visibilité dessus ? En conséquence, le compilateur a toute latitude pour effectuer cette compression...
De plus le type booléen en python est défini comme suit:
Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.)

https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
section "Truth Value Testing", c'est-à-dire un entier qui n'occupe que deux octets. Boolean est un sous-type de int.
Le reste dépend de la structure de données est de la façon dont l'utilisateur y stocke les données. Ce qui veut dire entre autres que le compilateur ne peut pas améliorer le mauvais usage d'une structure de données inadaptée à une situation donnée. De là, la nécessité de bien choisir cette structure dès le départ...
Avatar de l’utilisateur
rentech7289
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 66.4%
 
Messages: 107
Inscription: 16 Aoû 2021, 02:40
Localisation: Lorraine luxembourgeoise
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude parisse » 19 Sep 2021, 13:50

rentech7289 a écrit:La mémoire d'un tableau numpy est obligatoirement dans l'espace de visibilité de python puisque c'est une bibliothèque python. Comment python peut-il récupérer de la mémoire allouée par une de ses bibliothèque s'il n'a aucune visibilité dessus ? En conséquence, le compilateur a toute latitude pour effectuer cette compression...

???
numpy utilise une librairie C (lapack ou une implementation compatible) pour faire des calculs sur les matrices/vecteurs, numpy est une interface Python/C, ecrire une bibliotheque faisant de l'algebre lineaire directement en Python serait bien trop inefficace. La memoire allouee pour un tableau est liberee par les fonctions de la librairie C mais n'est pas visible directement depuis Python. Ce qui est affiche par les fonctions de gestion de la memoire en Python, c'est uniquement la taille memoire de la structure C de CPython qui sert a faire l'interface avec le vrai tableau, gere par lapack.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.1%
 
Messages: 3497
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude rentech7289 » 19 Sep 2021, 14:16

Les bibliothèques en question sont Matlab et OpenBLAS et tout le code a été entièrement réécrit autour de ces différentes parties (numpy-1.21.1/numpy/core/include/numpy/ entre autres) en langage C. Ce qui ne veut pas dire que les fichiers C n'ont pas été réécrits lors de leur intégration à numpy. Sur le fond ça ne change absolument rien puisque tous les compilateurs utilisent ce type de compression...
Avatar de l’utilisateur
rentech7289
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 66.4%
 
Messages: 107
Inscription: 16 Aoû 2021, 02:40
Localisation: Lorraine luxembourgeoise
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude parisse » 19 Sep 2021, 17:41

Vous melangez.
Matlab n'est surement pas utilise dans un projet sous licence open-source vu que c'est un logiciel proprietaire. blas est la 1ere couche dans les libraires d'algebre lineaire (basic linear algebra), celle qui propose les operations de base (par exemple matrice*vecteur, ou matrice*matrice, avec des implementation plus ou moins efficaces, par exemple pour multiplier des matrices plus rapidement qu'en O(n^3)). Il faut ensuite une 2eme couche qui permet par exemple de faire le pivot de Gauss, calculer les vecteurs propres d'une matrice, ... cette couche est fournie par lapack (ou compatible). numpy est un module natif CPython qui fait l'interface entre l'interpreteur CPython et ces librairies C.

Il n'y a pas de compression quand on utilise des booleens, c'est juste une utilisation optimale de l'espace disponible: sur un octet on peut mettre 8 booleens, chacun sur un bit. Donc un tableau de booleen (par exemple cree avec le type std::vector<bool> de la libstdc++) occupe 32 fois moins de place qu'un tableau d'entiers 32 bits (int).
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.1%
 
Messages: 3497
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: quelques fonctions d'arithmétique

Message non lude rentech7289 » 19 Sep 2021, 20:32

Vous melangez.

J'e reconnais mon erreur, la première bibliothèque s'appelle en fait Numeric. Toutes mes excuses pour cette erreur.
Il n'y a pas de compression quand on utilise des booleens, c'est juste une utilisation optimale de l'espace disponible: sur un octet on peut mettre 8 booleens, chacun sur un bit.

La compression algorithme ne s'attache pas à un type primitif en particulier mais à tout le code généré à la compilation, dans le cas de numpy, la source est:
https://numpy.org/doc/stable/reference/simd/simd-optimizations.html
sur un octet on peut mettre 8 booleens, chacun sur un bit

Un booleen n'est pas défini par un bit parce que cela impose d'avoir huit pointeurs sur un octet. Le premier problème avec un pointeur est de contenir une adresse mémoire (l'emplacement de l'octet) et non l'emplacement du bit dans l'octet, ce qui implique un second pointeur. Soit seize pointeurs sur un octet quand la moitié suffisent pour le type int (deux octets NDLR). Le second problème est que le microprocesseur doit amener le bit concerné à l'emplacement du bit 0 par décalage pour effectuer une comparaison logique avec la valeur 0 ou 1 en fonction du résultat recherché. Ce qui est une perte de temps.
Un autre problème que soulève ce fonctionnement est lié à la visibilité des données: quand le booléen n'est plus utilisé, il faut effacer les bits concernés dans les adresses mémoires avant d'effacer les pointeurs. Mais une telle opération ne peut être effectuée que manuellement, parce que aucun langage n'effectue d'opération bit à bit pour gérer un type de données primitif.
Je suis technicien en électronique de formation, avant d'avoir fait de l'informatique industrielle et je suis analyste-programmeur de métier. Je dirais que de ce point de vue je possède suffisamment d'expérience pour lire du code source et comprendre ce qui se passe dans l'ordinateur. Je ne remets pas en cause vos compétences mais je tiens surtout à remettre les bases de l'informatique à leur juste place.
Un compilateur fera tout pour ne pas avoir à recopier du code machine déjà écrit, c'est la version ultime de l'algorithme de Lemel-Ziv-Welch qui est à le principe de de tous les langages objets: réutiliser le code au maximum. Principe qui a été également repris par tous les systèmes d'exploitation. Le but étant toujours de ne pas recréer la roue à quelque niveau que ce soit...
Avatar de l’utilisateur
rentech7289
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 66.4%
 
Messages: 107
Inscription: 16 Aoû 2021, 02:40
Localisation: Lorraine luxembourgeoise
Genre: Homme
Calculatrice(s):
MyCalcs profile

PrécédenteSuivante

Retourner vers Programmation Python

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
860 utilisateurs:
>834 invités
>21 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)