2011-04-26 1 views
3

Je suis nouveau en python et j'ai une question à propos de array/matrix. Voici la matrice que j'ai.Comment rééchantillonner un tableau en python

A =

[[85 77 83 ... 59 58 59]

[80 83 80 ... 57 60 58]

[75 76 81. .., 59 58 60]]

Je veux re-échantillon (je ne sais pas si c'est le mot juste) la matrice de sorte qu'il devient

B =

[[85 85 85 85 77 77 77 77 83 83 83 83 ....... 59 59 59 59 58 58 58 58 59 59 59 59]

[85 85 85 85 77 77 77 77 83 83 83 83 ....... 59 59 59 59 58 58 58 58 59 59 59 59]

[85 85 85 85 77 77 77 77 83 83 83 83 ... .... 59 59 59 59 58 58 58 58 59 59 59 59]

[85 85 85 85 77 77 77 77 83 83 83 83 ....... 59 59 59 59 58 58 58 58 59 59 59 59]

[80 80 80 80 83 83 83 83 80 80 80 80 ....... 57 57 57 57 60 60 60 60 58 58 58 58]

[80 80 80 80 83 83 83 83 80 80 80 80 ....... 57 57 57 57 60 60 60 60 58 58 58 58]

[80 80 80 80 83 83 83 83 80 80 80 80 ....... 57 57 57 57 60 60 60 60 58 58 58 58]

[80 80 80 80 83 83 83 83 80 80 80 80 ....... 57 57 57 57 60 60 60 60 58 58 58 58]

[ 75 75 75 75 76 76 76 76 81 81 81 81 ....... 59 59 59 59 58 58 58 58 60 60 60 60]

[75 75 75 75 76 76 76 76 81 81 81 81 ....... 59 59 59 59 58 58 58 58 60 60 60 60]

[75 75 75 75 76 76 76 76 81 81 81 81 81 ....... 59 59 59 59 58 58 58 58 60 60 60 60]]

J'ai cherché en ligne et regardé beaucoup de messages, mais je n'ai aucune idée de comment faire ceci. Alors s'il vous plaît, enseignez-moi comment faire cela, et je suis grandement apprécié.

+0

Je pense que si vous expliquiez exactement ce que vous voulez faire à chaque ligne/élément de la matrice, vous découvrirez que vous avez réellement décrit l'algorithme pour le faire et que vous pouvez l'implémenter vous-même en Python. –

+0

Cela aidera: http://stackoverflow.com/questions/5586719/scipy-interpolation-how-to-resize-resample-3x3-matrix-to-5x5 – carl

Répondre

2

L'implémentation suivante rééchantillonne récursivement (duplique) une matrice ou une liste (n'importe quel type de conteneur itérable) contenant des nombres (tous les objets non itérables). C'est rapide et beaucoup plus simple à comprendre que d'autres alternatives. Il peut gérer des listes imbriquées arbitrairement. Chaque sous-liste est correctement copiée en profondeur.

import itertools 

def resample(obj, n): 
    try: 
     return list(itertools.chain.from_iterable((resample(row, n) for c in xrange(n)) for row in obj)) 
    except TypeError: 
     return obj 

Utilisation:

>>> l = [1, 2, 3, 4] 
>>> resample(l, 4) 
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4] 

>>> m = [[1, 2, 3, 4], [5, 6, 7, 8]] 
>>> resample(m, 4) 
[[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], 
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], 
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], 
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], 
[5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8], 
[5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8], 
[5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8], 
[5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8]] 
3

Utilisez certainement les informations de Scipy interpolation how to resize/resample 3x3 matrix to 5x5? à partir des commentaires.

Mais je pensais avoir mess et voici ce que je suis:

Peut-être la pire méthode à la recherche de tous les temps:

>>> import pprint 
>>> a = [[85, 77, 99], 
...  [11, 22, 33], 
...  [44, 55, 66]] 
>>> 
>>> def transform(n,matrix): 
...  return [item for sublist in [[[item for sublist in [[element]*n for element in row] for item in sublist] for _ in range(n)] for row in matrix] for item in sublist] 
... 
>>> pprint.pprint(transform(3,a)) 
[[85, 85, 85, 77, 77, 77, 99, 99, 99], 
[85, 85, 85, 77, 77, 77, 99, 99, 99], 
[85, 85, 85, 77, 77, 77, 99, 99, 99], 
[11, 11, 11, 22, 22, 22, 33, 33, 33], 
[11, 11, 11, 22, 22, 22, 33, 33, 33], 
[11, 11, 11, 22, 22, 22, 33, 33, 33], 
[44, 44, 44, 55, 55, 55, 66, 66, 66], 
[44, 44, 44, 55, 55, 55, 66, 66, 66], 
[44, 44, 44, 55, 55, 55, 66, 66, 66]] 
>>> pprint.pprint(transform(4,a)) 
[[85, 85, 85, 85, 77, 77, 77, 77, 99, 99, 99, 99], 
[85, 85, 85, 85, 77, 77, 77, 77, 99, 99, 99, 99], 
[85, 85, 85, 85, 77, 77, 77, 77, 99, 99, 99, 99], 
[85, 85, 85, 85, 77, 77, 77, 77, 99, 99, 99, 99], 
[11, 11, 11, 11, 22, 22, 22, 22, 33, 33, 33, 33], 
[11, 11, 11, 11, 22, 22, 22, 22, 33, 33, 33, 33], 
[11, 11, 11, 11, 22, 22, 22, 22, 33, 33, 33, 33], 
[11, 11, 11, 11, 22, 22, 22, 22, 33, 33, 33, 33], 
[44, 44, 44, 44, 55, 55, 55, 55, 66, 66, 66, 66], 
[44, 44, 44, 44, 55, 55, 55, 55, 66, 66, 66, 66], 
[44, 44, 44, 44, 55, 55, 55, 55, 66, 66, 66, 66], 
[44, 44, 44, 44, 55, 55, 55, 55, 66, 66, 66, 66]] 
>>> pprint.pprint(transform(5,a)) 
[[85, 85, 85, 85, 85, 77, 77, 77, 77, 77, 99, 99, 99, 99, 99], 
[85, 85, 85, 85, 85, 77, 77, 77, 77, 77, 99, 99, 99, 99, 99], 
[85, 85, 85, 85, 85, 77, 77, 77, 77, 77, 99, 99, 99, 99, 99], 
[85, 85, 85, 85, 85, 77, 77, 77, 77, 77, 99, 99, 99, 99, 99], 
[85, 85, 85, 85, 85, 77, 77, 77, 77, 77, 99, 99, 99, 99, 99], 
[11, 11, 11, 11, 11, 22, 22, 22, 22, 22, 33, 33, 33, 33, 33], 
[11, 11, 11, 11, 11, 22, 22, 22, 22, 22, 33, 33, 33, 33, 33], 
[11, 11, 11, 11, 11, 22, 22, 22, 22, 22, 33, 33, 33, 33, 33], 
[11, 11, 11, 11, 11, 22, 22, 22, 22, 22, 33, 33, 33, 33, 33], 
[11, 11, 11, 11, 11, 22, 22, 22, 22, 22, 33, 33, 33, 33, 33], 
[44, 44, 44, 44, 44, 55, 55, 55, 55, 55, 66, 66, 66, 66, 66], 
[44, 44, 44, 44, 44, 55, 55, 55, 55, 55, 66, 66, 66, 66, 66], 
[44, 44, 44, 44, 44, 55, 55, 55, 55, 55, 66, 66, 66, 66, 66], 
[44, 44, 44, 44, 44, 55, 55, 55, 55, 55, 66, 66, 66, 66, 66], 
[44, 44, 44, 44, 44, 55, 55, 55, 55, 55, 66, 66, 66, 66, 66]] 
>>> 
0

Je ne suis pas exactement comprendre votre algorithme ou ce que vous voulez à faire, mais:

a=[[1,2],[3,4]] 
# grow horizontally, 5 times 
b=[[c for d in zip(x,x,x,x,x) for c in d] for x in a] 
# grow vertically, 5 times 
c= [z[:] for x in ((y[:],y[:],y[:],y[:],y[:]) for y in b) for z in x] 

Notez que cela fonctionne avec des tableaux de quoi que ce soit car il utilise uniquement les primitives de langue de base

0
import numpy as np 
import scipy as sp 

# your matrix. Let's say A(3,3) with random values from 0 to 20 
A = sp.random.randint(20,size=(3,3)) 

# Resize as you want (m x n) 
m =5 
n =5 
New_A = sp.kron(A, sp.ones(m,n)) 

print New_A 

Même il est un peu en retard pour la réponse que je préférais donner quelques commentaires à ce sujet!

Questions connexes