playfield
- это массив символов, поэтому любое отрицательное число становится '-'
. Если вы измените 'O'
на положительное целое число, все должно работать нормально.
Например, если вы используете:
codes = {'X': 3, 'O': 2, '-': 0}
Тогда результат будет:
array([['3', '2', '3'],
['0', '3', '2'],
['0', '0', '3']], dtype='<U1')
Однако итерация по всему массиву, возможно, является худшим способом подстановки в numpy.
Что-то вроде этого было бы более эффективным:
for k in codes.keys():
playfield[playfield == k] = codes[k]
Если вам нужен окончательный массив чтобы быть массивом int
s, я бы сказал go о преобразованиях следующим образом:
import numpy as np
playfield = np.array([
['X', 'O', 'X'],
['-', 'X', 'O'],
['-', '-', 'X']
])
codes = {'X': 6, 'O': 3, '-': 0}
for k in codes:
playfield[playfield == k] = codes[k]
playfield = playfield.astype(int) - 3
Таким образом, вы все равно можете начать с исходного массива символов, и вам нужно будет только выполнить преобразование типа один раз.