Я прочитал на официальной странице о том, что существует альтернатива созданию инициализированного массива без использования только нулей:
пусто, в отличие от нулей, не устанавливает значения массива в ноль и можетпоэтому будьте немного быстрее.
Я создал две функции ниже, которые демонстрируют необычную проблему с использованием этой функции:
import numpy as np
def getInitialisedArray():
return np.empty((), dtype=np.float).tolist()
def createFloatArray(x):
return np.array(float(x))
Если я просто вызываю getInitialisedArray()
самостоятельно, здесьэто то, что он выводит:
>>> getInitialisedArray()
0.007812501848093234
И если я просто вызываю функцию createFloatArray()
:
>>> createFloatArray(3.1415)
3.1415
Все это выглядит нормально, но если я повторю тест и вызову getInitialisedArray()
после создания массива с плавающей точкой возникает проблема:
print(getInitialisedArray())
print(createFloatArray(3.1415))
print(getInitialisedArray())
Вывод:
>>>
0.007812501848093234
3.1415
3.1415
Кажется, что второй вызов для получения инициализированного массива получаетто же значение, что и в нормальном np.array()
.Я не понимаю, почему это происходит.Разве они не должны быть отдельными массивами, которые не имеют связи между собой?
--- Обновление ---
Я повторил это и изменил размер пустогомассив:
import numpy as np
def getInitialisedArray():
# Changed size to 2 x 2
return np.empty((2, 2), dtype=np.float).tolist()
def createFloatArray(x):
return np.array(float(x))
print(getInitialisedArray())
print(createFloatArray(3.1415))
print(getInitialisedArray())
Вывод:
[[1.6717403e-316, 6.9051865033801e-310], [9.97338022253e-313, 2.482735075993e-312]]
3.1415
[[1.6717403e-316, 6.9051865033801e-310], [9.97338022253e-313, 2.482735075993e-312]]
Это такой вывод, который я ожидал, но здесь он работает, потому что я изменил размер.Влияет ли размер теперь, если пустой массив принимает то же значение, что и обычный np.array()
?