Comment faire un damier dans numpy?
Je suis en utilisant numpy pour initialiser un réseau de pixels gris damier (la représentation classique de "pas de pixels", ou transparent). Il semble qu'il devrait y avoir un whizzy façon de le faire avec numpy est étonnant tableau d'affectation ou de découpage en tranches ou en dés opérations, mais c'est le meilleur que j'ai trouvé:
w, h = 600, 800
sq = 15 # width of each checker-square
self.pix = numpy.zeros((w, h, 3), dtype=numpy.uint8)
# Make a checkerboard
row = [[(0x99,0x99,0x99),(0xAA,0xAA,0xAA)][(i//sq)%2] for i in range(w)]
self.pix[[i for i in range(h) if (i//sq)%2 == 0]] = row
row = [[(0xAA,0xAA,0xAA),(0x99,0x99,0x99)][(i//sq)%2] for i in range(w)]
self.pix[[i for i in range(h) if (i//sq)%2 == 1]] = row
Il fonctionne, mais je m'attendais à quelque chose de plus simple.
Je pense que tu veux dire
numpy.zeros((h, w, 3), ...)
(retournement w
et h
).OriginalL'auteur Ned Batchelder | 2010-01-30
Vous devez vous connecter pour publier un commentaire.
cela devrait le faire
toute taille damier vous voulez (il suffit de passer en largeur et en hauteur, w, h); j'ai également codé en dur cellule hauteur/largeur de 1, même si bien sûr il peut aussi en être paramétré de sorte qu'une valeur arbitraire est passé:
avec ce tableau 2D, il est simple de rendre une image d'un damier, comme suit:
Nice! ro peut être écrit simplement comme re^1. (juste XORing re avec 1)
Cela fonctionne pour les même et non même largeur / hauteur:
import numpy
def checkerboard(w, h, a=0, b=1):
row0 = numpy.r_[ int(w/2.0) * [a,b] + (w % 2) * [a] ]
row1 = row0^1
return numpy.row_stack( int(h/2.0) * (row0, row1) + (h % 2) * (row0,) )
OriginalL'auteur doug
J'utiliserais Produit de Kronecker
kron
:Le damier dans cet exemple a 2*4=8 champs de taille 10x10 dans chaque direction.
OriginalL'auteur Falko
Voici une autre façon de faire à l'aide de
ogrid
qui est un peu plus rapide:Voici les timeit résultats:
Assurez-vous. C'était un mauvais choix de ma part d'assumer la couleur devait être gris...
OriginalL'auteur unutbu
En retard, mais pour la postérité:
OriginalL'auteur Ben Kirwin
Je ne sais pas si c'est mieux que ce que j'avais:
OriginalL'auteur Ned Batchelder
Ne pouvez-vous pas utiliser hstack et vstack? Voir ici.
Comme ceci:
Ce n'est pas un tableau de la bonne taille, mais il semblerait que vous avez élargi votre réponse dans votre blog. Mais nous ne pouvons pas voter le blog! 🙂 Sheesh!
OriginalL'auteur telliott99
Plus compact, probablement le plus rapide, et aussi la seule solution posté qui généralise à n-dimensions.
OriginalL'auteur Eelco Hoogendoorn
OriginalL'auteur geoffLangenderfer
J'ai modifié hass de répondre comme suit.
OriginalL'auteur pizzaslice
OriginalL'auteur priya_03
J'ai récemment veux la même fonction et j'ai modifié doug réponse un peu comme suit:
OriginalL'auteur shelper