Вы можете преобразовать в эквивалентное неструктурированное представление (без дополнительных затрат на копирование базовых данных):
my_3dview_of_ints = my_2d_of_3tuples.view(dtype=int)
, где my_2d_of_3tuples
- это ваштекущий структурированный массив (массив кортежей)
Затем вы можете выполнять обычные операции с массивными массивами в этом представлении, не сталкиваясь с ошибками типов.
Например, если ваш массив выглядит так:
[[(207, 27, 185) ( 90, 197, 52) ( 58, 153, 145) (239, 42, 39)]
[(218, 23, 195) (226, 92, 170) ( 21, 114, 190) (192, 145, 48)]]
тогда представление, как создано выше, будет выглядеть так:
[[[207 27 185]
[ 90 197 52]
[ 58 153 145]
[239 42 39]]
[[218 23 195]
[226 92 170]
[ 21 114 190]
[192 145 48]]]
Например:
pixel_a = my_3dview_of_ints[0,0] # pixel [207,27,185] at [0,0]
pixel_b = my_3dview_of_ints[1,1] # pixel [226,92,170] at [1,1]
pixel_diff = numpy.subtract( pixel_a, pixel_b) # Gives [-12,-65,5]
Вы даже можете изменить определенные элементы ввид, и изменения будут автоматически отражаться в соответствующем месте в исходном структурированном массиве:
my_3dview_of_ints[3,3] = pixel_a # Assign [207, 27,185] to location [3,3]