Как заполнить массив нулями python
Здравствуйте, Jenyay, Вы писали:
J>Можно ли в питоне создать массив (или список) определенного размера и сразу заполнить его нулями?
Со последним способом нужно быть осторожным
| От: | Кодт | |
| Дата: | 14.02.07 16:03 | |
| Оценка: | 7 (2) | |
Здравствуйте, Jenyay, Вы писали:
J>Можно ли в питоне создать массив (или список) определенного размера и сразу заполнить его нулями?
| От: | Jenyay | http://jenyay.net |
| Дата: | 14.02.07 16:45 | |
| Оценка: |
Здравствуйте, Константин, Вы писали:
К>
Спасибо, только не понял почему работают первые 4 способо В справке такого выражения для for не нашел.
| От: | Jenyay | http://jenyay.net |
| Дата: | 14.02.07 16:45 | |
| Оценка: |
Здравствуйте, Кодт, Вы писали:
К>
Спасибо, а я копал в сторону range, думал с ним надо как-то извернуться
| От: | Константин | |
| Дата: | 15.02.07 10:07 | |
| Оценка: | 6 (1) | |
Здравствуйте, Jenyay, Вы писали:
J>Спасибо, только не понял почему работают первые 4 способо В справке такого выражения для for не нашел.
Это называется List Comprehensions.
Аналоги есть в haskell, erlang.
| От: | Кодт |
| Дата: | 15.02.07 11:14 |
| Оценка: |
| От: | Jenyay | http://jenyay.net |
| Дата: | 15.02.07 15:01 | |
| Оценка: |
Здравствуйте, Константин, Вы писали:
К>Это называется List Comprehensions.
numpy.zeros
Функция zeros() возвращает новый массив указанной формы и типа, заполненный нулями.
Параметры: shape — целое число, список или кортеж целых чисел Задает размеры необходимого массива — целое число или кортеж целых чисел. dtype — тип данных NumPy (необязательный) Определяет тип данных выходного массива. order — ‘C’ или ‘F’ (необязательный) Этот параметр определяет в каком порядке массивы должны храниться в памяти: строчном C-стиле или столбчатом стиле Fortran. Возвращает: результат — массив NumPy Массив из нулей, указанной формы, типа и порядка.
Как заполнить массив нулями python
Визуально, данный массив выглядит следующим образом:

Глядя на картинку, становится понятно, что первая ось (и индекс соответственно) — это строки, вторая ось — это столбцы. Т.е. получить элемент 9 можно простой командой:
Снова можно подумать, что ничего нового — все как в стандартном Python. Да, так и есть, и, это круто!
Еще круто, то что NumPy добавляет к удобному и привычному синтаксису Python, весьма удобные трюки, например — транслирование массивов:
В данном примере, без всяких циклов, мы умножили каждый столбец из массива a на соответствующий элемент из массива b .
Т.е. мы как бы транслировали (в какой-то степени можно сказать — растянули) массив b по массиву a .
То же самое мы можем проделать с каждой строкой массива a :
В данном случае мы просто прибавили к массиву a массив-столбец c . И получили, то что хотели.
При работе с двумерными или трехмерными массивами, особенно с массивами большей размерности, становится очень важным удобство работы с элементами массива, которые расположены вдоль отдельных измерений — его осей.
Например, у нас есть двумерный массив и мы хотим узнать его минимальные элементы по строкам и столбцам.
Для начала создадим массив из случайных чисел и пусть, для нашего удобства, эти числа будут целыми:
Минимальный элемент в данном массиве это:
А вот минимальные элементы по столбцам и строкам:
Такое поведение заложено практически во все функции и методы NumPy:
Что насчет вычислений, их скорости и занимаемой памяти?
Для примера, создадим трехмерный массив:
Почему именно трехмерный?
На самом деле реальный мир вовсе не ограничивается таблицами, векторами и матрицами.
Еще существуют тензоры, кватернионы, октавы. А некоторые данные, гораздо удобнее представлять именно в трехмерном и четырехмерном представлении:

Визуализация (и хорошее воображение) позволяет сразу догадаться, как устроена индексация трехмерных массивов. Например, если нам нужно вытащить из данного массива число 31, то достаточно выполнить:
В самом деле, у массивов есть целый ряд важных атрибутов. Например, количество осей массива (его размерность), которую при работе с очень большими массивами, не всегда легко увидеть:
Массив a действительно трехмерный.
Но иногда становится интересно, а на сколько же большой массив перед нами. Например, какой он формы, т.е. сколько элементов расположено вдоль каждой оси? Ответить позволяет метод ndarray.shape :
Метод ndarray.size просто возвращает общее количество элементов массива:
Еще может встать такой вопрос — сколько памяти занимает наш массив?
Иногда даже возникает такой вопрос — влезет ли результирующий массив после всех вычислений в оперативную память?
Что бы на него ответить надо знать, сколько «весит» один элемент массива:
ndarray.itemsize возвращает размер элемента в байтах.
Теперь мы можем узнать сколько «весит» наш массив:
Итого — 384 байта. На самом деле, размер занимаемой массивом памяти, зависит не только от количества элементов в нем, но и от испльзуемого типа данных:
dtype(‘int64’) — означает, что используется целочисленный тип данных, в котором для хранения одного числа выделяется 64 бита памяти.
Но если мы выполним какие-нибудь вычисления с массивом, то тип данных может измениться:
Теперь у нас есть еще один массив — массив b и его тип данных ‘float64’ — вещественные числа (числа с плавающей точкой) длинной 64 бита.
Создание массивов в NumPy¶
И так, массив может быть создан из обычного списка или кортежа Python с использованием функции array() .
Причем тип полученного массива зависит от типа элементов последовательности:
Функция array() преобразует последовательности последовательностей в двумерные массивы, а последовательности последовательностей, которые тоже состоят из последовательностей в трехмерные массивы.
То есть уровень вложенности исходной последовательности определяет размерность получаемого массива:
Очень часто возникает задача создания массива определенного размера, причем, чем заполнен массив абсолютно неважно.
В этом случае можно воспользоваться циклами или генераторами списков (кортежей), но NumPy для таких случаев предлагает более быстрые и менее затратные функции-заполнители.
Функция zeros заполняет массив нулями, функция ones — единицами, а функция empty — случайными числами, которые зависят от состояния памяти.
По умолчанию, тип создаваемого массива — float64 .
Для создания последовательностей чисел NumPy предоставляет функцию arange , которая возвращает одномерные массивы:
Если функция arange используется с аргументами типа float , то предсказать количество элементов в возвращаемом массиве не так-то просто.
Гораздо чаще возникает необходимость указания не шага изменения чисел в диапазоне, а количества чисел в заданном диапазоне.
Функция linspace , так же как и arange принимает три аргумента, но третий аргумент, как раз и указывает количество чисел в диапазоне.
Функция linspace удобна еще и тем, что может быть использована для вычисления значений функций на заданном множестве точек:
Чтобы быстрее разобраться с примерами печати массивов воспользуемся методом ndarray.reshape() , который позволяет изменять размеры массивов.
Одномерные массивы в NumPy печатаются в виде строк:
Двумерные массивы печатаются в виде матриц:
Трехмерные массивы печатаются в виде списка матриц, которые разделены пустой строкой:
Можете поэкспериментировать с печатью массивов большей размерности и вы убедитесь, что в ней довольно легко ориентироваться.
В случае, если массив очень большой (больше 1000 элементов), NumPy печатает только начало и конец массива, заменяя его центральную часть многоточием.
Если необходимо выводить весь массив целиком, то такое поведение печати можно изменить с помощью set_printoptions .
Занимаясь научными вычислениями, вы получаете результаты, которые должны быть обязательно сохранены.
Самый надежный способ хранения — это загрузка массивов с результатами в файл, так как их легко хранить и передавать.
Для данных нужд, NumPy предоставляет очень удобные инструменты, позволяющие производить загрузку и выгрузку массивов в файлы различных форматов, а также производить их сжатие, необходимое для больших массивов.
Двоичные файлы NumPy (.npy, .npz)¶
NumPy имеет два собственных формата файлов .npy — для хранения массивов без сжатия и .npz — для предварительного сжатия массивов.