[Python] Comment créer une matrice de motifs répétitifs (repmat / tile)

Comment créer une matrice de motifs répétitifs. Quand vous voulez faire ce qu'on appelle repmat dans Matlab

Il existe deux méthodes.

  1. Utilisez numpy.matlib.repmat
  2. Utilisez numpy.tile

1. Comment utiliser numpy.matlib.repmat

numpy.matlib.repmat(a, m, n)

In [1]: import numpy as np

In [2]: import numpy.matlib

In [3]: np.matlib.repmat((1,2,3),1,5)
Out[3]: array([[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]])

In [4]: A = np.diag((100,200,300))

In [5]: print A
[[100   0   0]
 [  0 200   0]
 [  0   0 300]]

In [6]: np.matlib.repmat(A,2,2)
Out[6]: 
array([[100,   0,   0, 100,   0,   0],
       [  0, 200,   0,   0, 200,   0],
       [  0,   0, 300,   0,   0, 300],
       [100,   0,   0, 100,   0,   0],
       [  0, 200,   0,   0, 200,   0],
       [  0,   0, 300,   0,   0, 300]])

In [7]: np.matlib.repmat(A,1,2)
Out[7]: 
array([[100,   0,   0, 100,   0,   0],
       [  0, 200,   0,   0, 200,   0],
       [  0,   0, 300,   0,   0, 300]])

In [8]: np.matlib.repmat(A,2,1)
Out[8]: 
array([[100,   0,   0],
       [  0, 200,   0],
       [  0,   0, 300],
       [100,   0,   0],
       [  0, 200,   0],
       [  0,   0, 300]])

2. Comment utiliser numpy.tile

numpy.tile(a, reps)

In [9]: np.tile((1,2,3),(1,5))
Out[9]: array([[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]])

In [10]: np.tile(A,(2,2))
Out[10]: 
array([[100,   0,   0, 100,   0,   0],
       [  0, 200,   0,   0, 200,   0],
       [  0,   0, 300,   0,   0, 300],
       [100,   0,   0, 100,   0,   0],
       [  0, 200,   0,   0, 200,   0],
       [  0,   0, 300,   0,   0, 300]])

In [11]: np.tile(A,(1,2))
Out[11]: 
array([[100,   0,   0, 100,   0,   0],
       [  0, 200,   0,   0, 200,   0],
       [  0,   0, 300,   0,   0, 300]])

In [12]: np.tile(A,(2,1))
Out[12]: 
array([[100,   0,   0],
       [  0, 200,   0],
       [  0,   0, 300],
       [100,   0,   0],
       [  0, 200,   0],
       [  0,   0, 300]])

Si vous utilisez repmat, par exemple, vous pouvez l'utiliser lorsque vous souhaitez ne laisser que les positions paires du tableau bidimensionnel et définir le reste sur 0.

In [27]: X = np.arange(100).reshape(10,10)

In [28]: Y = np.matlib.repmat(np.array([[1,0],[0,0]]),5,5)

In [29]: print X
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]

In [30]: print Y
[[1 0 1 0 1 0 1 0 1 0]
 [0 0 0 0 0 0 0 0 0 0]
 [1 0 1 0 1 0 1 0 1 0]
 [0 0 0 0 0 0 0 0 0 0]
 [1 0 1 0 1 0 1 0 1 0]
 [0 0 0 0 0 0 0 0 0 0]
 [1 0 1 0 1 0 1 0 1 0]
 [0 0 0 0 0 0 0 0 0 0]
 [1 0 1 0 1 0 1 0 1 0]
 [0 0 0 0 0 0 0 0 0 0]]

In [31]: Z = X * Y

In [32]: print Z
[[ 0  0  2  0  4  0  6  0  8  0]
 [ 0  0  0  0  0  0  0  0  0  0]
 [20  0 22  0 24  0 26  0 28  0]
 [ 0  0  0  0  0  0  0  0  0  0]
 [40  0 42  0 44  0 46  0 48  0]
 [ 0  0  0  0  0  0  0  0  0  0]
 [60  0 62  0 64  0 66  0 68  0]
 [ 0  0  0  0  0  0  0  0  0  0]
 [80  0 82  0 84  0 86  0 88  0]
 [ 0  0  0  0  0  0  0  0  0  0]]

Dans le cas d'une image couleur, il s'agit de données tridimensionnelles, c'est donc comme suit.

ipython


In [1]: from skimage import data

In [2]: from skimage import io

In [3]: import numpy as np

In [4]: sz = 48

In [5]: image = data.lena()

In [6]: patch1 = image[250:250+sz,250:250+sz,:]

In [7]: patch1.shape
Out[7]: (48, 48, 3)

In [8]: mask = np.tile(np.array([[[1],[0]],[[0],[0]]],dtype=np.uint8),(sz/2,sz/2,3))

In [9]: mask.shape
Out[9]: (48, 48, 3)

In [10]: print mask
[[[1 1 1]
  [0 0 0]
  [1 1 1]
  ..., 
  [0 0 0]
  [1 1 1]
  [0 0 0]]


 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ..., 
  [0 0 0]
  [0 0 0]
  [0 0 0]]]

In [11]: patch2 = patch1 * mask

In [12]: patch12 = np.hstack((patch1,patch2))

20160104_6.png

Recommended Posts

[Python] Comment créer une matrice de motifs répétitifs (repmat / tile)
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
[Python] Comment rendre une classe itérable
Comment écrire un type liste / dictionnaire de Python3
Comment créer un package Python à l'aide de VS Code
[Python] Comment créer une matrice de contiguïté / liste de contiguïté [Théorie des graphes]
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Comment créer un package Python (écrit pour un stagiaire)
Comment obtenir une liste d'exceptions intégrées pour python
Comment faire une traduction japonais-anglais
Comment créer un robot - Avancé
Comment créer une fonction récursive
[Blender] Comment créer un plug-in Blender
Comment créer un robot - Basic
[Python] Comment créer une table à partir d'une liste (opération de base de création de table / changement de nom de matrice)
Comment déterminer l'existence d'un élément sélénium en Python
[Python] Comment forcer une méthode d'une sous-classe à effectuer un processus spécifique
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Comment vérifier la taille de la mémoire d'une variable en Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
[Python] Résumé de l'utilisation des pandas
Faisons un noyau jupyter
Créer un diagramme de relations des modules Python
[Python] Comment inverser une chaîne de caractères
[Python2.7] Résumé de l'utilisation d'unittest
[Python2.7] Résumé de l'utilisation du sous-processus
Comment exécuter des scripts Maya Python
[Question] Comment utiliser plot_surface de python
[Python] Comment extraire / supprimer / convertir une matrice contenant des valeurs manquantes (NaN)
Comment envoyer une image visualisée des données créées en Python à Typetalk
[Python] Comment mettre n'importe quel nombre d'entrées standard dans la liste
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Python] Comment lire le fichier csv (méthode read_csv du module pandas)
Comment bien formater une liste de dictionnaires (ou d'instances) en Python
Comment créer un système de dialogue dédié aux débutants
Comment calculer la volatilité d'une marque
Comment lire un fichier CSV avec Python 2/3
[Python] Comment utiliser deux types de type ()
Comment ouvrir un navigateur Web à partir de python
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Résumé de la façon d'importer des fichiers dans Python 3
Comment créer un fichier JSON en Python
Comment créer un dictionnaire avec une structure hiérarchique.
Je veux faire un jeu avec Python
Copiez la liste en Python
Résumé de l'utilisation de MNIST avec Python
Comment ajouter un chemin de recherche de module Python
Comment créer un plug-in QGIS (génération de package)
Comment spécifier des attributs avec Mock of Python
Comment notifier les canaux Discord en Python
Comment obtenir des éléments de type dictionnaire de Python 2.7
J'ai lu "Comment créer un laboratoire de piratage"