How to make a checkerboard in numpy?

后端 未结 24 1198
小鲜肉
小鲜肉 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:27
    import numpy as np
    
    a=np.array(([1,0]*4+[0,1]*4)*4).reshape((8,8))
    print(a)
    
    
    [[1 0 1 0 1 0 1 0]
     [0 1 0 1 0 1 0 1]
     [1 0 1 0 1 0 1 0]
     [0 1 0 1 0 1 0 1]
     [1 0 1 0 1 0 1 0]
     [0 1 0 1 0 1 0 1]
     [1 0 1 0 1 0 1 0]
     [0 1 0 1 0 1 0 1]]
    
    0 讨论(0)
  • 2020-11-30 08:27

    I recently want the same function and i modified doug's answer a little bit as follows:

    def gen_checkerboard(grid_num, grid_size):
        row_even = grid_num/2 * [0,1]
        row_odd = grid_num/2 * [1,0]
        checkerboard = numpy.row_stack(grid_num/2*(row_even, row_odd))
        return checkerboard.repeat(grid_size, axis = 0).repeat(grid_size, axis = 1)
    
    0 讨论(0)
  • 2020-11-30 08:28
    def checkerboard(shape):
        return np.indices(shape).sum(axis=0) % 2
    

    Most compact, probably the fastest, and also the only solution posted that generalizes to n-dimensions.

    0 讨论(0)
  • 2020-11-30 08:28
    import numpy as np
    x = np.ones((3,3))
    print("Checkerboard pattern:")
    x = np.zeros((8,8),dtype=int)
    # (odd_rows, even_columns)
    x[1::2,::2] = 1
    # (even_rows, odd_columns)
    x[::2,1::2] = 1
    print(x)
    
    0 讨论(0)
  • 2020-11-30 08:28

    Very very late, but I needed a solution that allows for a non-unit checker size on an arbitrarily sized checkerboard. Here's a simple and fast solution:

    import numpy as np
    
    def checkerboard(shape, dw):
        """Create checkerboard pattern, each square having width ``dw``.
    
        Returns a numpy boolean array.
        """
        # Create individual block
        block = np.zeros((dw * 2, dw * 2), dtype=bool)
        block[dw:, :dw] = 1
        block[:dw, dw:] = 1
    
        # Tile until we exceed the size of the mask, then trim
        repeat = (np.array(shape) + dw * 2) // np.array(block.shape)
        trim = tuple(slice(None, s) for s in shape)
        checkers = np.tile(block, repeat)[trim]
    
        assert checkers.shape == shape
        return checkers
    

    To convert the checkerboard squares to colors, you could do:

    checkers = checkerboard(shape, dw)
    img = np.empty_like(checkers, dtype=np.uint8)
    img[checkers] = 0xAA
    img[~checkers] = 0x99
    
    0 讨论(0)
  • 2020-11-30 08:28

    Here is the solution using tile function in numpy.

    import numpy as np
    
    x = np.array([[0, 1], [1, 0]])
    check = np.tile(x, (n//2, n//2))
    # Print the created matrix
    print(check)
    
    1. for input 2, the Output is
         [[0 1]
         [1 0]]
    
    1. for input 4, the Output is
         [[0 1 0 1] 
         [1 0 1 0]
         [0 1 0 1]
         [1 0 1 0]]
    
    0 讨论(0)
提交回复
热议问题