У меня очень длинный список списка, и я преобразовываю его в массив numpy с помощью numpy.asarray(), безопасно ли удалить исходный список после получения этой матрицы или сделать Это действие также повлияет на новый массив numpy.is numpy asarray() относится к исходному списку
ответ
Я уверен, что данные не используются и вы можете безопасно удалить списки. Ваш исходный matrix
является вложенной структурой объектов Python, причем сами номера также являются объектами Python, которые могут быть расположены повсюду в памяти. Массив Numpy также является объектом, но он более или менее представляет собой заголовок, который содержит размеры и тип данных, с указателем на непрерывный блок данных, где все числа упаковываются как можно ближе, как «сырые числа», , Нет никакого способа, как эти два разных способа могли бы обмениваться данными, поэтому, вероятно, данные копируются при создании массива Numpy. Пример:
In [1]: m = [[1,2,3],[4,5,6],[7,8,9]]
In [2]: import numpy as np
In [3]: M = np.array(m)
In [4]: M[1,1] = 55
In [5]: M
Out[5]:
array([[ 1, 2, 3],
[ 4, 55, 6],
[ 7, 8, 9]])
In [6]: m
Out[6]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # original is not modified!
Обратите внимание, что Numpy массивы могут обмениваться данными между друг с другом, например, когда вы делаете срез в массив. Это называется «вид», так что если вы измените данные в подмножестве, он также будет меняться в исходном массиве:
In [18]: P = M[1:, 1:]
In [19]: P[1,1] = 666
In [20]: P
Out[20]:
array([[ 55, 6],
[ 8, 666]])
In [21]: M
Out[21]:
array([[ 1, 2, 3],
[ 4, 55, 6],
[ 7, 8, 666]]) # original is also modified!
Да, это безопасно удалить его, если ваш ввод данных состоит из list
. Из документации No copy is performed (ONLY) if the input is already an ndarray.
Спасибо за ответ – Lanc
Данные копируются из-за того, что массив numpy хранит свою собственную копию данных, как описано Bas Swinckels. Вы можете проверить это и для себя. Хотя тривиальным небольшой список мог бы отметить также, что GINORMOUS набор данных ниже может привести точку дома немного лучше;)
import numpy as np
list_data = range(1000000000) # note, this will probably take a long time
# This will also take a long time
# because it is copying the data in memory
array_data = np.asarray(list_data)
# even this will probably take a while
del list_data
# But you still have the data even after deleting the list
print(array_data[1000])
Спасибо за ответ! Я действительно пробовал это и как-то в одном из запусков, массив numpy был затронут, но я никогда не смог воспроизвести сценарий, поэтому, возможно, какая-то ошибка с моей стороны – Lanc
- 1. Выполнение индексов подсписков относится к исходному списку
- 2. Стандартизованный numpy/scipy декоратор `asarray`
- 3. JQuery всегда относится к исходному DOM
- 4. Доступ к исходному списку запуска в рецепте
- 5. Угловой 2 дочерний компонент относится к исходному компоненту
- 6. ListSelector относится ко всему списку
- 7. Пролог Применение ограничений к исходному списку Элементы в матрице
- 8. Пользовательский список адаптеров Adapter Filter не возвращается к исходному списку
- 9. Python: Итерация по списку, который относится к другим спискам
- 10. Ошибка «Указанный объект не относится к списку» с использованием CSOM
- 11. Один столбец, который относится к списку <string>
- 12. Numpy - asarray из списка, размер не устанавливается автоматически в векторе
- 13. перегружать поплавок к Numpy массиву
- 14. numpy 3D-индексация по списку
- 15. Почему объект, к которому относится переменная Proc, относится к изменению?
- 16. Это относится к полиморфизму?
- 17. Is NumPy Messing Up CX_Freeze?
- 18. Преобразование JSON к списку
- 19. Возврат к исходному виду
- 20. Выравнивание изображения к исходному
- 21. возврат к исходному значению
- 22. ActiveQuery для массива (asArray)
- 23. Понимание матрицы к списку Перечня, а затем Numpy массив
- 24. Numpy массив расстояний к списку (строка, столбец, расстояние)
- 25. ионным - как перейти к списку и выберите и вернуться к исходному с выбранным значением
- 26. Привязка к исходному методу activerecord
- 27. Java-цикл к исходному заявлению
- 28. numpy: Надежный (неконсервативный) индикатор, если numpy array is view
- 29. «класс» относится к «объекту», поскольку «интерфейс» относится к ...?
- 30. итерацию по списку с функцией, которая относится список объектов
NumPy массив и список можно с уверенностью обмениваться данными, по крайней мере, когда DTYPE является объектом: 'd = [[1, 2, 'foo'], ['12', 13]]; np.asarray (d) [0] - d [0] -> True'. Теперь изменение элементов во внутреннем списке также повлияет на элементы массива. Но дело в том, что удаление этого списка (если только делеция не применяется delslice во внутренних списках) не повлияет на массив вообще, потому что удаление просто приводит к уменьшению суммы refcount в . –
Я предположил, что мы говорили о числах, но да, когда dtype является объектом, объекты в матрице остаются неизменными. Но вы все равно можете безопасно удалить списки, я думаю, поскольку объекты затем удерживаются живым массивом Numpy. –
Спасибо @BasSwinckels и Ashwini – Lanc