How to make a checkerboard in numpy?

后端 未结 24 1187
小鲜肉
小鲜肉 2020-11-30 07:52

I\'m using numpy to initialize a pixel array to a gray checkerboard (the classic representation for \"no pixels\", or transparent). It seems like there ought to be a whizzy

相关标签:
24条回答
  • 2020-11-30 08:01

    this ought to do it

    any size checkerboard you want (just pass in width and height, as w, h); also i have hard-coded cell height/width to 1, though of course this could also be parameterized so that an arbitrary value is passed in:

    >>> import numpy as NP
    
    >>> def build_checkerboard(w, h) :
          re = NP.r_[ w*[0,1] ]              # even-numbered rows
          ro = NP.r_[ w*[1,0] ]              # odd-numbered rows
          return NP.row_stack(h*(re, ro))
    
    
    >>> checkerboard = build_checkerboard(5, 5)
    
    >>> checkerboard
     Out[3]: array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
                   [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
                   [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
                   [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
                   [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
                   [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
                   [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
                   [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
                   [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
                   [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
    

    with this 2D array, it's simple to render an image of a checkerboard, like so:

    >>> import matplotlib.pyplot as PLT
    
    >>> fig, ax = PLT.subplots()
    >>> ax.imshow(checkerboard, cmap=PLT.cm.gray, interpolation='nearest')
    >>> PLT.show()
    
    0 讨论(0)
  • 2020-11-30 08:04
    n = int(input())
    import numpy as np
    m=int(n/2)
    a=np.array(([0,1]*m+[1,0]*m)*m).reshape((n,n))
    
    print (a)
    

    So if input is n = 4 then output would be like:

    [[0 1 0 1]
     [1 0 1 0]
     [0 1 0 1]
     [1 0 1 0]]
    
    0 讨论(0)
  • 2020-11-30 08:04

    Using tile function :

    import numpy as np
    n = int(input())
    x = np.tile(arr,(n,n//2))
    x[1::2, 0::2] = 1
    x[0::2, 1::2] = 1
    print(x)
    
    0 讨论(0)
  • 2020-11-30 08:05

    I'd use the Kronecker product kron:

    np.kron([[1, 0] * 4, [0, 1] * 4] * 4, np.ones((10, 10)))
    

    The checkerboard in this example has 2*4=8 fields of size 10x10 in each direction.

    0 讨论(0)
  • 2020-11-30 08:06

    Can't you use hstack and vstack? See here. Like this:

    >>> import numpy as np
    >>> b = np.array([0]*4)
    >>> b.shape = (2,2)
    >>> w = b + 0xAA
    >>> r1 = np.hstack((b,w,b,w,b,w,b))
    >>> r2 = np.hstack((w,b,w,b,w,b,w))
    >>> board = np.vstack((r1,r2,r1,r2,r1,r2,r1))
    
    0 讨论(0)
  • 2020-11-30 08:07

    For those wanting arbitrarily sized squares/rectangles:

    import numpy as np
    # if you want X squares per axis, do squaresize=[i//X for i in boardsize]
    def checkerboard(boardsize, squaresize):
        return np.fromfunction(lambda i, j: (i//squaresize[0])%2 != (j//squaresize[1])%2, boardsize).astype(int)
    
    print(checkerboard((10,15), (2,3)))
    [[0 0 0 1 1 1 0 0 0 1 1 1 0 0 0]
     [0 0 0 1 1 1 0 0 0 1 1 1 0 0 0]
     [1 1 1 0 0 0 1 1 1 0 0 0 1 1 1]
     [1 1 1 0 0 0 1 1 1 0 0 0 1 1 1]
     [0 0 0 1 1 1 0 0 0 1 1 1 0 0 0]
     [0 0 0 1 1 1 0 0 0 1 1 1 0 0 0]
     [1 1 1 0 0 0 1 1 1 0 0 0 1 1 1]
     [1 1 1 0 0 0 1 1 1 0 0 0 1 1 1]
     [0 0 0 1 1 1 0 0 0 1 1 1 0 0 0]
     [0 0 0 1 1 1 0 0 0 1 1 1 0 0 0]]
    
    0 讨论(0)
提交回复
热议问题