Я использую приведенный ниже код для создания пустой матрицы:

import numpy as np

x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])

print(x)

y =np.empty_like(x)

print(y)
# I get below data:
[[2097184 2097184 2097184]
 [2097184 2097184 2097184]
 [2097184 2097184 2097184]
 [2097184 2097184 2097184]]

Почему 2097184 стоит пустой?

0
qg_java_17137 24 Ноя 2021 в 07:07
КОГДА вы используете empty_like, содержимое не инициализируется. Так что они могут быть любыми.
 – 
Barmar
24 Ноя 2021 в 07:09

3 ответа

Лучший ответ

Это ничего не значит. Из документации:

Эта функция не инициализирует возвращаемый массив; для этого используйте вместо этого zeros_like или ones_like. Это может быть немного быстрее, чем функции, которые устанавливают значения массива.

Таким образом, содержимое массива - это все, что находится в памяти, которую он для него использовал. В данном случае это был набор значений 2097184. В следующий раз вы, вероятно, получите что-то другое.

Вы используете это, когда вам все равно, что находится в массиве, потому что вы собираетесь его перезаписать.

0
Barmar 24 Ноя 2021 в 07:13

Метод empty_like не инициализирует массив (поэтому он намного быстрее, чем zeros_like и ones_like), поэтому форма массива точно такая же, как у x, но значения не инициализированы и фактически представляют собой почти случайные значения из области памяти, выделенной для массива.

0
S0H31L 24 Ноя 2021 в 07:14

Кроме того, это просто более эффективная альтернатива zeros_like или ones_like:

%%timeit
np.zeros_like(x)
>>> 18.4 µs ± 2.39 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%%timeit
np.ones_like(x)
>>> 14.1 µs ± 205 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%%timeit
np.empty_like(x)
>>> 2.09 µs ± 62.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
0
mathfux 24 Ноя 2021 в 07:42