OVH Cloud OVH Cloud

Taille d'une matrice en mémoire ?

2 réponses
Avatar
TEXTORIS Julien
Bonjour,

Dans le programme que j'essaie d'écrire, je vais me retrouver en
condition réelle avec une matrice de 15000x15000.
Est-ce perl affecte la place pour toute la matrice en mémoire, auquel
cas, ca va être énorme, ou est-ce qu'il ne place que les cases
attribuées ? Parec que en fait, il y a peu de cases remplies.

Si c'est la première solutions, auriez vous une idée pour gagner de la
place en mémoire ? Un autre type à utiliser, ou un objet déjà existant
pour ce genre de problèmes ?

merci

Julien

2 réponses

Avatar
Klaus
"TEXTORIS Julien" wrote in message
news:42edd8a9$0$6697$
Bonjour,

Dans le programme que j'essaie d'écrire, je vais me retrouver en
condition réelle avec une matrice de 15000x15000.
Est-ce perl affecte la place pour toute la matrice en mémoire,


pour une table: oui
pour un hashage: non

auquel cas, ca va être énorme, ou est-ce qu'il ne place que les
cases attribuées ? Parec que en fait, il y a peu de cases remplies.

Si c'est la première solutions, auriez vous une idée pour gagner de la
place en mémoire ? Un autre type à utiliser, ou un objet déjà existant
pour ce genre de problèmes ?


Tu peux utiliser un "hashage de hashage":
voir http://perl.enstimac.fr/DocFr/perldsc.html#hachages%20de%20hachages

l'exemple suivant n'utilise que la mémoire pour 3 nombres:
=========================== use strict;
use warnings;

my %Matrix;

$Matrix{1498}{1321} = -958.274;
$Matrix{1185}{260} = 0.957;
$Matrix{1088}{1455} = 5873;

for my $x (sort keys %Matrix) {
for my $y (sort keys %{$Matrix{$x}}) {
printf "Matrix[%4d, %4d] = %8.3fn", $x, $y, $Matrix{$x}{$y};
}
}
===========================
--
Klaus

Avatar
TEXTORIS Julien
Klaus wrote:
"TEXTORIS Julien" wrote in message
news:42edd8a9$0$6697$

Bonjour,

Dans le programme que j'essaie d'écrire, je vais me retrouver en
condition réelle avec une matrice de 15000x15000.
Est-ce perl affecte la place pour toute la matrice en mémoire,



pour une table: oui
pour un hashage: non


auquel cas, ca va être énorme, ou est-ce qu'il ne place que les
cases attribuées ? Parec que en fait, il y a peu de cases remplies.

Si c'est la première solutions, auriez vous une idée pour gagner de la
place en mémoire ? Un autre type à utiliser, ou un objet déjà existant
pour ce genre de problèmes ?



Tu peux utiliser un "hashage de hashage":
voir http://perl.enstimac.fr/DocFr/perldsc.html#hachages%20de%20hachages

l'exemple suivant n'utilise que la mémoire pour 3 nombres:
=========================== > use strict;
use warnings;

my %Matrix;

$Matrix{1498}{1321} = -958.274;
$Matrix{1185}{260} = 0.957;
$Matrix{1088}{1455} = 5873;

for my $x (sort keys %Matrix) {
for my $y (sort keys %{$Matrix{$x}}) {
printf "Matrix[%4d, %4d] = %8.3fn", $x, $y, $Matrix{$x}{$y};
}
}
=========================== >
Merci ;-) c'est exactement ce qu'il me fallait !