(batch_size, class_id, range_indices) -> (4, 3, 2)
int64
[[[1250 1302]
[1324 1374]
[1458 1572]]
[[1911 1955]
[1979 2028]
[2120 2224]]
[[2546 2599]
[2624 2668]
[2765 2871]]
[[3223 3270]
[3286 3347]
[3434 3539]]]
Как с помощью этого правила создать плотное представление с заполненным значением?
Поскольку существует 3 идентификатора класса, следовательно:
- Идентификатор класса 0: заполнен цифрой 1
- Идентификатор класса 1: заполнен цифрой 2
- Идентификатор класса 2: заполнено 3
- По умолчанию: заполнено 0
[0 0 0 ...(until 1250)... 1 1 1 ...(until 1302)... 0 0 0 ...(until 1324)... 2 2 2 ...(until 1374)... and so on]
Вот копируемый код:
data = np.array([[[1250, 1302],
[1324, 1374],
[1458, 1572]],
[[1911, 1955],
[1979, 2028],
[2120, 2224]],
[[2546, 2599],
[2624, 2668],
[2765, 2871]],
[[3223, 3270],
[3286, 3347],
[3434, 3539]]])
Вот код, сгенерированный ChatGPT, но я не уверен, что это Numpythonic, поскольку он использует понимание списка:
import numpy as np
# Given tensor
tensor = np.array([[[1250, 1302],
[1324, 1374],
[1458, 1572]],
[[1911, 1955],
[1979, 2028],
[2120, 2224]],
[[2546, 2599],
[2624, 2668],
[2765, 2871]],
[[3223, 3270],
[3286, 3347],
[3434, 3539]]])
# Determine the maximum value in the tensor to define the size of the output array
max_value = tensor.max()
# Create an empty array filled with zeros of size max_value + 1
dense_representation = np.zeros(max_value + 1, dtype=int)
# Generate the class_ids array, replicated for each batch
class_ids = np.tile(np.arange(1, tensor.shape[1] + 1), tensor.shape[0])
# Generate start and end indices
start_indices = tensor[:, :, 0].ravel()
end_indices = tensor[:, :, 1].ravel()
# Create an array of indices to fill
indices = np.hstack([np.arange(start, end) for start, end in zip(start_indices, end_indices)])
# Create an array of values to fill
values = np.hstack([np.full(end - start, class_id) for start, end, class_id in zip(start_indices, end_indices, class_ids)])
# Fill the dense representation array
dense_representation[indices] = values
# The resulting dense representation
print(dense_representation)
print(dense_representation[1249:1303])
print(dense_representation[1323:1375])
print(dense_representation[1457:1573])
print(dense_representation[1910:1956])
Выход:
[0 0 0 ... 3 3 0]
[0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0]
[0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 0]
[0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0]
[0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0]
Подробнее здесь: https://stackoverflow.com/questions/787 ... encoding-f