Home > OS >  Numpy reranging chararray
Numpy reranging chararray

Time:11-03

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.

CodePudding user response:

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' '' '']]]
  • Related