Numpythonic способ заполнения значения на основе ссылки на индексы диапазона (кодирование меток из заданных индексов диаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Numpythonic способ заполнения значения на основе ссылки на индексы диапазона (кодирование меток из заданных индексов диа

Сообщение Anonymous »

У меня есть такое тензорное измерение:
(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
Поэтому вектор выводится следующим образом:< /p>
[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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»