8
votes

Comment créer une très grande matrice à l'aide de MATLAB

J'ai un problème avec Matlab lorsque j'essaie de créer une matrice avec une très grande taille telle que 40000x40000.

Par exemple:

x = zéros (40000.40000);

Le message d'erreur est "??? La taille maximale de la variable autorisée par le programme est dépassée."

Y a-t-il une solution.

J'ai aussi une autre question, pouvons-nous avoir une matrice avec une taille de colonne variable telle que dans Java.


0 commentaires

7 Réponses :


1
votes

40k * 40k => 1.6 * 10 ^ 9 numéros. Je crois que les zéros vont retourner des flotteurs. Donc, vous auriez besoin d'environ 1,6 * 10 ^ 9 flottants * 4 octets / flotteurs => 6,4 Go de RAM juste pour cette variable ...

Êtes-vous shreal que vous avez besoin d'un si grand tableau?


0 commentaires

16
votes

40000 * 40000 * 8 octets par numéro = 12 Go, vous n'aurez sûrement pas assez de mémoire.

Pour créer une énorme matrice avec beaucoup de zéros, vous avez besoin d'une matrice SPARSE FORT>: p> xxx pré>


Pour créer un tableau de variantes, vous pouvez utiliser un tableau Cell Cell STRY>: P>

m = cell(3, 1)
m(1) = [1,2,3]
m(2) = [2,4,6,8,10]
m(3) = 6+6i


0 commentaires

0
votes

Non, eh bien ouais acheter plus de RAM, comme indiqué ci-dessous. Sparse supprime simplement zéro éléments.

et dans matlab, vous pouvez simplement ajouter le nouveau col / rangs à la matrice pour créer une matrice plus grande.

AH, mais vous voulez dire, pouvez-vous avoir une matrice où une colonne est de 10 rangées, et une autre est 20 par exemple. Non, tu ne peux pas faire ça. Je ne pensais pas que tu pouvais à Java tbh.


0 commentaires

3
votes

Si vous avez vraiment besoin d'une matrice qui grande, vous pouvez utiliser le Boîte à outils informatique parallèle (et le Computing distribué MATLAB Serveur ) pour exploiter simultanément la mémoire de plusieurs machines. Cela vous permettrait d'écrire: xxx

Voir aussi: DOC pour les tableaux de codistribue


0 commentaires

4
votes

Il y a beaucoup de choses que vous pouvez faire, car les différentes réponses signalent. La bonne réponse dépend de votre problème réel. La création de la force brute d'un tel réseau est impossible sans une version 64 bits de Matlab plus une mémoire suffisante pour stocker ce grand tableau, ou stocker la matrice d'une autre manière. Vous pouvez stocker le tableau hors ligne, apportant uniquement ce dont vous avez besoin comme vous l'utilisez.

Par exemple, si ces numéros seront toujours des petits entiers, utilisez UINT8 ou INT8, ou un tableau logique, même un seul tableau, tout ce qui réduira les exigences de la mémoire comparées à deux tableaux. Ou utilisez un formulaire de stockage clairsemé selon le cas. Beaucoup dépend de ce que vous ferez avec le tableau.

En ce qui concerne un nombre variable d'éléments d'affilée, utilisez une matrice de cellule ici, pas un tableau traditionnel plat.


0 commentaires

0
votes

Je pense utiliser des fichiers de disque dur pour stocker ces données est le meilleur choix


0 commentaires

1
votes

Une solution autour du problème de la mémoire pourrait être de créer un Matfile pour votre matrice. La façon dont je comprends, c'est que cela saute la mémoire et l'écrit directement sur votre disque dur. J'ai essayé ceci pour que les matrices soient trop grandes pour la mémoire de mon ordinateur Wimpy, et c'était lent, mais cela a fonctionné. Vous devrez probablement le construire un peu à la fois.


0 commentaires