Cours Apl 05 : Commençons à jouer avec les objets

Dans le chapitre précédent nous avons vu comment créer et dimensionner les objets.
Nous allons un peu approfondir ce sujet et vite passer au suivant.

Concaténation, linéarisation

Pour ces 2 opérations on utilise la fonction symbolisée par une virgule.
- on appelle linéarisation le fait de transformer un objet en vecteur.
Exemple ,Mat1 donne
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1
sa dimension est : ⍴ ,Mat1
16
On peut aussi transformer un scalaire en un vecteur d'un seul élément.
ex : ⍴,5 rend 1
alors que ⍴5 rend vide.

- La concaténation consiste à coller 2 objets.
Soient 2 vecteurs numériques

         V1 ← 1 2 3
         V2 ← 4 5 6 7
         V1,V2 rend
1 2 3 4 5 6 7
On peut également concaténer des matrices sous réserve que leurs dimensions soient compatibles.
Par exemple pour coller 2 matrices cote à cote, il faut qu'elles aient le même nombre de lignes.
Soient
         Ma1 ← 2 2 ⍴ 'aabb'
         Ma2 ← 2 2 ⍴ 'eeff'
         Ma1
aa
bb
         Ma2
ee
ff
Pour obtenir une matrice composée de Ma1 et Ma2, il suffit d'écrire
         Ma1,Ma2       on obtient :
aaee
bbff

Travail avec axes

Par défaut Apl travaille sur la dernière dimension (pour une matrice : les colonnes).
Pour le coller des matrices l'une en dessous de l'autre, il faut préciser qu'on veut travailler sur la première dimension en collant [1] juste à droite de la virgule.
         Ma1,[1]Ma2
aa
bb
ee
ff
Quand on manipule 2 matrices "Ma1,Ma2" est équivalent à "Ma1,[2]Ma2".
Le travail avec axes s'applique également au take et au drop.
Ainsi pour afficher la première colonne d'une matrice Mnum1, on peut écrire : 1↑[2]Mnum1
On peut ainsi l'utiliser sans même connaître son nombre de lignes.

Générer une suite de nombre en utilisant le iota monadique : ⍳
Exemple :

         ⍳ 5 rend
1 2 3 4 5
Retenez bien cette fonction. Nous l'utiliserons dans les chapitres suivants.


Travaux pratiques

0
Chargez votre Ws de travaux pratiques
)load c:\Mes documents\pratique-apl
1
Affichez la première colonne de Mnum1, puis la dimension de cette colonne.
2
Affichez cette colonne sous forme de vecteur.
3
Affichez Mnum1 puis Mnum2 sous forme de vecteurs.
Affichez un grand vecteur représentant la concaténation de Mnum1 et Mnum2.
4
Multipliez chaque élément du vecteur du point 3 par la longueur de Mnum2.
5
Affichez les 4 premières colonnes de Mnum2 sous Mnum1.
6
Créez une matrice Mnum3 de même dimensions que Mnum1 et remplie de chiffres allant de 1 au nombre d'éléments composant Mnum1.
Contraintes : ne pas saisir explicitement la dimension de Mnum1, ni le nombre d'éléments la composant, ni bien sûr les éléments eux mêmes.
7
7. Affichez :
- Mnum1 à gauche de Mnum3
- Mnum3 au dessus de Mnum1
- Mnum1 à droite de Mnum3
- Mnum1 au dessus de Mnum3
8
En utilisant le iota et d'autres fonctions déjà vues dans ce cours, affichez :
- une suite de nombres allant de 1 à 10
- de 10 à 100
- de 6 à 15
- de ¯9 à 0
- de 5 à 10, puis de 15 à 20 : 5 6 7 8 9 10 15 16 17 18 19 20
9
Affichez une matrice de 3 lignes, 4 colonnes composées des nombres allant de 100 à 1200.
Recommencez en collant Mnum1 à droite.
Recommencez en additionnant Mnum1 à cette matrice.
10
Collez une ligne de 100 au dessus de Mnum1 et une colonne de 0 à droite.
- Collez une ligne de 100 sous Mnum1 et une colonne de 0 à gauche.
- Collez une ligne de 100 au dessus de Mnum1 et une colonne de 0 à gauche.
11
Sauvez votre travail
)save

Solutions

1
Affichez la première colonne de Mnum1, puis la dimension de cette colonne.
         1↑[2]Mnum1
Puis
         ⍴1↑[2]Mnum1
2
Affichez cette colonne sous forme de vecteur.
         ,1↑[2]Mnum1
3
Affichez Mnum1 puis Mnum2 sous forme de vecteurs.
         , Mnum1
         , Mnum2
Affichez un grand vecteur représentant la concaténation de Mnum1 et Mnum2.
         ( , Mnum1), , Mnum2
4
Multipliez chaque élément du vecteur du point 3 par la longueur de Mnum2.
         (⍴Mnum2) x ( , Mnum1), , Mnum2
5
Affichez les 4 premières colonnes de Mnum2 sous Mnum1.
         Mnum1,[1]4↑[2]Mnum2
6
Créez une matrice Mnum3 de même dimensions que Mnum1 et remplie de chiffres allant de 1 au nombre d'éléments composant Mnum1.
Contraintes : ne pas saisir explicitement la dimension de Mnum1, ni le nombre d'éléments la composant, ni bien sûr les éléments eux mêmes.
         Mnum3← (⍴Mnum1)⍴⍳⍴,Mnum1
7
Affichez :
- Mnum1 à gauche de Mnum3
         Mnum1, Mnum3
- Mnum3 au dessus de Mnum1
         Mnum3,[1] Mnum1
- Mnum1 à droite de Mnum3
         Mnum3, Mnum1
- Mnum1 au dessus de Mnum3
         Mnum1,[1] Mnum3
8
En utilisant le iota et d'autres fonctions déjà vues dans ce cours, affichez :
- une suite de nombres allant de 1 à 10
         ⍳10
- de 10 à 100
         10×⍳10
- de 6 à 15
         5+⍳10
Ou
         5↓⍳15
- de ¯9 à 0
         ¯10+⍳10
- de 5 à 10, puis de 15 à 20 : 5 6 7 8 9 10 15 16 17 18 19 20
         (4+⍳6),14+⍳6
9
Affichez une matrice de 3 lignes, 4 colonnes composées des nombres allant de 100 à 1200.
         3 4⍴100×⍳12
Recommencez en collant Mnum1 à droite.
         (3 4⍴100×⍳12),Mnum1
Recommencez en additionnant Mnum1 à cette matrice.
         (3 4⍴100×⍳12)+Mnum1
10
Collez une ligne de 100 au dessus de Mnum1 et une colonne de 0 à droite.
         100,[1]Mnum1,0
- Collez une ligne de 100 sous Mnum1 et une colonne de 0 à gauche.
         0,Mnum1,[1]100
- Collez une ligne de 100 au dessus de Mnum1 et une colonne de 0 à gauche.
         100,[1]0,Mnum1