numpytypeerrorchararray

Numpy reranging chararray


How can one rerange chararrays without getting a TypeError.

import numpy as np


    bggr =   ([['B', 'G', 'B', 'G'],
               ['G', 'R', 'G', 'R'],
               ['B', 'G', 'B', 'G'],
               ['G', 'R', 'G', 'R']])
    
    
    test = np.chararray((4, 4, 3)) #create empty chararray
    test[:] = ''
    test[::2, ::2, 2]=bggr[0::2, 0::2] #blue
    test[1::2, ::2, 1]=bggr[1::2, 0::2] #green
    test[::2, 1::2, 1]=bggr[0::2, 1::2] #green
    test[1::2, 1::2, 0]=bggr[1::2, 1::2] #red
    print(test)

ā€‚

Traceback (most recent call last):
  File "main.py", line 16, in <module>
    test[::2, ::2, 2]=bggr[0::2, 0::2] #blue
TypeError: list indices must be integers or slices, not tuple

Tried the exact same code with numbers instead of chars and it worked fine. Thank you.


Solution

  • You need to use a numpy array for bggr:

    import numpy as np
    
    
    bggr = np.array([['B', 'G', 'B', 'G'],
                     ['G', 'R', 'G', 'R'],
                     ['B', 'G', 'B', 'G'],
                     ['G', 'R', 'G', 'R']])
    
    
    test = np.chararray((4, 4, 3)) #create empty chararray
    test[::2, ::2, 2]=bggr[0::2, 0::2] #blue
    test[1::2, ::2, 1]=bggr[1::2, 0::2] #green
    test[::2, 1::2, 1]=bggr[0::2, 1::2] #green
    test[1::2, 1::2, 0]=bggr[1::2, 1::2] #red
    
    print(test)
    

    output:

    [[['' '' b'B']
      ['' b'G' '']
      ['' '' b'B']
      ['' b'G' '']]
    
     [['' b'G' '']
      [b'R' b'\x04' '']
      ['' b'G' '']
      [b'R' '' '']]
    
     [[b'\x06' '' b'B']
      ['' b'G' '']
      ['' '' b'B']
      ['' b'G' '']]
    
     [['' b'G' '']
      [b'R' '' '']
      ['' b'G' '']
      [b'R' '' '']]]