Если ваши числа маленькие sh числа, например np.uint8
(например, метки в неконтролируемой классификации), вы можете сдвинуть и ИЛИ слои вместе в толстое 64-битное целое и объединить их с этим - что позволит вам объединить до 8 np.uint8
слоев или 4 np.int16
слоев, например.
#!/usr/bin/env python3
import numpy as np
# Ensure repeatable, deterministic randomness!
np.random.seed(42)
# Generate test arrays
arr2 = np.array(np.random.randint(low=0, high=4, size=25)).reshape(5,5)
arr1 = np.array(np.random.randint(low=0, high=4, size=25)).reshape(5,5)
# Build a FatThing by shifting and ORing arrays together, do 3 arrays with FatThing = arr1 | (arr2<<8) | (arr3(<<16)
FatThing = arr1 | (arr2<<8)
# Find unique values in FatThing
uniques = np.unique(FatThing)
# Make lookup table of labels corresponding to each fat value
FatThing2label = {uniques[i]:i for i in range(len(uniques))}
# Lookup label of each fat value
result = [FatThing2label[int(x)] for x in np.nditer(FatThing)]
result = np.array(result).reshape(arr1.shape)
, который генерирует arr1
как:
array([[1, 1, 1, 3, 3],
[0, 0, 3, 1, 1],
[0, 3, 0, 0, 2],
[2, 2, 1, 3, 3],
[3, 3, 2, 1, 1]])
И arr2
as:
array([[2, 3, 0, 2, 2],
[3, 0, 0, 2, 1],
[2, 2, 2, 2, 3],
[0, 3, 3, 3, 2],
[1, 0, 1, 3, 3]])
Что делает FatThing
похожим на это:
array([[513, 769, 1, 515, 515],
[768, 0, 3, 513, 257],
[512, 515, 512, 512, 770],
[ 2, 770, 769, 771, 515],
[259, 3, 258, 769, 769]])
И result
это:
array([[ 8, 11, 1, 9, 9],
[10, 0, 3, 8, 4],
[ 7, 9, 7, 7, 12],
[ 2, 12, 11, 13, 9],
[ 6, 3, 5, 11, 11]])