Ну, *self.dim
используется для распаковки контейнера в качестве аргумента.В основном это означает, что вы передаете self.dim
, и функция обрабатывает его как кортеж, который нужно распаковать внутри функции.См. this для более широкого объяснения (раздел «Для распаковки контейнеров»).
В вашем случае вы используете его в:
X = np.empty((self.batch_size, *self.dim, self.n_channels))
где np.empty()
ожидает кортеж, содержащий int (или один int) в качестве первого аргумента.В вашем случае вы передаете кортеж, содержащий кортеж в качестве второго элемента.Вы должны распаковать его самостоятельно, чтобы он работал следующим образом:
X = np.empty((self.batch_size, self.dim[0], self.dim[1], self.n_channels))
Итак, вам следует придерживаться части *
, но по-разному трактовать аргумент.Кроме того, *arg
обладает большей гибкостью, что означает, что он может работать с контейнерами с 2, 3 и т. Д. Элементами, которые будут иметь жестко запрограммированный фрагмент кода, подобный args[0], args[1]
.