Перейти к содержимому

Shape 0 python что это

  • автор:

Метод Python shape() — все, что вам нужно знать!

Здравствуйте, читатели! В этой статье рассказывается о методе Python shape() и его вариантах в программировании с примерами.

Использование метода Python shape()

Когда дело доходит до анализа данных и их вариантов, крайне важно осознавать объем данных. То есть, прежде чем мы планируем анализировать данные и выполнять их синтез, нам необходимо знать об измерениях данных.

Именно тогда на сцену выходит метод Python shape().

Метод shape() обеспечивает гибкость для получения размеров любого объекта Python. Да, он возвращает значение кортежа, указывающее размеры объекта Python.

Чтобы понять вывод, кортеж, возвращаемый методом shape(), представляет собой фактическое количество элементов, представляющих значение измерения объекта.

Обычно в более широком масштабе метод shape() используется для получения размеров объектов типа Pandas и NumPy в python.

Каждое значение, представленное кортежем, соответствует фактическому измерению с точки зрения массива или строки/столбца.

Давайте теперь посмотрим на вариант того же самого в следующем разделе.

Вариант 1: атрибут формы Pandas

Когда мы пытаемся связать объект типа Pandas с методом формы, ищущим измерения, он возвращает кортеж, который представляет строки и столбцы как значение измерений.

dataframe.shape 

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

В этом примере мы создали фрейм данных из списка Python, используя метод DataFrame(). После этого мы применяем dataframe.shape для проверки размеров.

Поскольку данные, которые мы передали, имеют две строки и два столбца (2×2), метод shape возвращает нам количество строк и столбцов в качестве результата.

import pandas as pd data =[['P','Q'], [0, 1]] data_frame = pd.DataFrame(data) print(data_frame) print("Shape of the data frame:") print(data_frame.shape) 
 0 1 0 P Q 1 0 1 Shape of the data frame: (2, 2) 

В этом примере мы создали пустой фрейм данных, используя функцию DataFrame(). Затем с помощью метода shape() мы можем получить размеры пустого фрейма данных.

import pandas as pd data_frame = pd.DataFrame() print(data_frame) print("Shape of the data frame:") print(data_frame.shape) 
Empty DataFrame Columns: [] Index: [] Shape of the data frame: (0, 0) 

Вариант 2: метод формы NumPy

Со структурой данных NumPy мы храним элементы данных в виде массива. Когда мы связываем метод shape() с массивом NumPy, размеры массива представляются в виде кортежа.

array.shape 

Здесь мы создали массив NumPy без размеров. Кроме того, мы применили метод shape() к массиву, чтобы получить размеры созданного массива.

import numpy as np ar = np.array(0) print(ar) print("Shape of the array:") print(ar.shape) 
0 Shape of the array: () 

В этом примере мы создали массив NumPy и добавили в него элементы. Это достигается с помощью функции numpy.array(). Теперь мы применяем метод shape() к массиву элементов.

import numpy as np ar = np.array([[12,20] ,[13,15]]) print(ar) print("Shape of the array:") print(ar.shape) 
[[12 20] [13 15]] Shape of the array: (2, 2) 

Заключение

На этом мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если у вас возникнут какие-либо вопросы.

Чтобы узнать больше о таких сообщениях, связанных с Kubernetes, оставайтесь с нами.

А пока удачного обучения! 🙂

Все права защищены. © Linux-Console.net • 2019-2024

NumPy, часть 1: начало работы

Python 3 логотип

NumPy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых (и очень быстрых) математических функций для операций с этими массивами.

Установка NumPy

На linux — пакет python3-numpy (или аналогичный для вашей системы), или через pip. Ну или же собирать из исходников https://sourceforge.net/projects/numpy/files/NumPy/.

На Windows на том же сайте есть exe установщики. Или, если возникают проблемы, рекомендую ещё хороший сборник библиотек http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy.

Начинаем работу

Основным объектом NumPy является однородный многомерный массив (в numpy называется numpy.ndarray). Это многомерный массив элементов (обычно чисел), одного типа.

Наиболее важные атрибуты объектов ndarray:

ndarray.ndim — число измерений (чаще их называют «оси») массива.

ndarray.shape — размеры массива, его форма. Это кортеж натуральных чисел, показывающий длину массива по каждой оси. Для матрицы из n строк и m столбов, shape будет (n,m). Число элементов кортежа shape равно ndim.

ndarray.size — количество элементов массива. Очевидно, равно произведению всех элементов атрибута shape.

ndarray.dtype — объект, описывающий тип элементов массива. Можно определить dtype, используя стандартные типы данных Python. NumPy здесь предоставляет целый букет возможностей, как встроенных, например: bool_, character, int8, int16, int32, int64, float8, float16, float32, float64, complex64, object_, так и возможность определить собственные типы данных, в том числе и составные.

ndarray.itemsize — размер каждого элемента массива в байтах.

ndarray.data — буфер, содержащий фактические элементы массива. Обычно не нужно использовать этот атрибут, так как обращаться к элементам массива проще всего с помощью индексов.

Создание массивов

В NumPy существует много способов создать массив. Один из наиболее простых — создать массив из обычных списков или кортежей Python, используя функцию numpy.array() (запомните: array — функция, создающая объект типа ndarray):

Функция array() трансформирует вложенные последовательности в многомерные массивы. Тип элементов массива зависит от типа элементов исходной последовательности (но можно и переопределить его в момент создания).

Можно также переопределить тип в момент создания:

Функция array() не единственная функция для создания массивов. Обычно элементы массива вначале неизвестны, а массив, в котором они будут храниться, уже нужен. Поэтому имеется несколько функций для того, чтобы создавать массивы с каким-то исходным содержимым (по умолчанию тип создаваемого массива — float64).

Функция zeros() создает массив из нулей, а функция ones() — массив из единиц. Обе функции принимают кортеж с размерами, и аргумент dtype:

Функция eye() создаёт единичную матрицу (двумерный массив)

Функция empty() создает массив без его заполнения. Исходное содержимое случайно и зависит от состояния памяти на момент создания массива (то есть от того мусора, что в ней хранится):

Для создания последовательностей чисел, в NumPy имеется функция arange(), аналогичная встроенной в Python range(), только вместо списков она возвращает массивы, и принимает не только целые значения:

Вообще, при использовании arange() с аргументами типа float, сложно быть уверенным в том, сколько элементов будет получено (из-за ограничения точности чисел с плавающей запятой). Поэтому, в таких случаях обычно лучше использовать функцию linspace(), которая вместо шага в качестве одного из аргументов принимает число, равное количеству нужных элементов:

fromfunction(): применяет функцию ко всем комбинациям индексов

Печать массивов

Если массив слишком большой, чтобы его печатать, NumPy автоматически скрывает центральную часть массива и выводит только его уголки.

Если вам действительно нужно увидеть весь массив, используйте функцию numpy.set_printoptions:

И вообще, с помощью этой функции можно настроить печать массивов "под себя". Функция numpy.set_printoptions принимает несколько аргументов:

precision : количество отображаемых цифр после запятой (по умолчанию 8).

threshold : количество элементов в массиве, вызывающее обрезание элементов (по умолчанию 1000).

edgeitems : количество элементов в начале и в конце каждой размерности массива (по умолчанию 3).

linewidth : количество символов в строке, после которых осуществляется перенос (по умолчанию 75).

suppress : если True, не печатает маленькие значения в scientific notation (по умолчанию False).

nanstr : строковое представление NaN (по умолчанию ‘nan’).

infstr : строковое представление inf (по умолчанию ‘inf’).

formatter : позволяет более тонко управлять печатью массивов. Здесь я его рассматривать не буду, можете почитать здесь (на английском).

И вообще, пользуйтесь официальной документацией по numpy, а в этом пособии я постараюсь описать всё необходимое. В следующей части мы рассмотрим базовые операции над массивами.

Подписывайтесь, чтобы не пропустить 🙂

Для вставки кода на Python в комментарий заключайте его в теги

Что делает .shape [] в «для i в диапазоне (Y.shape [0])»?

Я пытаюсь разбить программу по строкам. Y - это матрица данных, но я не могу найти конкретных данных о том, что именно делает .shape[0] .

for i in range(Y.shape[0]): if Y[i] == -1: 

Эта программа использует numpy, scipy, matplotlib.pyplot и cvxopt.
HipsterCarlGoldstein 18 апр. 2012, в 01:04
Поделиться
Felix Kling 17 апр. 2012, в 22:46
Поделиться:
matplotlib

5 ответов

Атрибут shape для массивов numpy возвращает размеры массива. Если Y имеет n строки и столбцы m , то Y.shape - (n,m) . Итак, Y.shape[0] есть n .

In [46]: Y = np.arange(12).reshape(3,4) In [47]: Y Out[47]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) In [48]: Y.shape Out[48]: (3, 4) In [49]: Y.shape[0] Out[49]: 3 

unutbu 17 апр. 2012, в 23:57
Поделиться

shape - это кортеж, который дает размеры массива.

>>> c = arange(20).reshape(5,4) >>> c array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]]) c.shape[0] 5 

Дает количество строк

c.shape[1] 4 

Дает количество столбцов

Vivek Ananthan 18 янв. 2014, в 06:57
Поделиться

shape - это кортеж, который дает вам указание количества измерений в массиве. Итак, в вашем случае, поскольку значение индекса Y.shape[0] равно 0, вы работаете по первому размеру вашего массива.

 An array has a shape given by the number of elements along each axis: >>> a = floor(10*random.random((3,4))) >>> a array([[ 7., 5., 9., 3.], [ 7., 2., 7., 8.], [ 6., 8., 3., 2.]]) >>> a.shape (3, 4) 

Levon 17 апр. 2012, в 22:49
Поделиться
Круто спасибо, Левон!
HipsterCarlGoldstein 17 апр. 2012, в 22:50

@HipsterCarlGoldstein Просто дружеское замечание: если хотя бы один из приведенных ответов решил вашу проблему, рассмотрите возможность ее принятия, установив флажок рядом с ответом . Это даст вам и ответчику несколько очков репутации, а также пометит эту проблему как решенную - спасибо.

Levon 17 июнь 2012, в 19:31

В Python shape() используется в pandas, чтобы указать число строк/столбцов:

Количество строк задается:

train = pd.read_csv('fine_name') //load the data train.shape[0] 

Число столбцов указано

train.shape[1] 

HeadAndTail 16 нояб. 2017, в 05:15
Поделиться

Предположим, что в python вы загрузили данные в некоторый переменный поезд:

train = pandas.read_csv('file_name') >>> train train([[ 1., 2., 3.], [ 5., 1., 2.]],) 

Я хочу проверить, каковы размеры "имя_файла". Я сохранил файл в поезде

>>>train.shape (2,3) >>>train.shape[0] # will display number of rows 2 >>>train.shape[1] # will display number of columns 3 

Drool 14 дек. 2018, в 04:43
Поделиться

Ещё вопросы

  • 1 Как удаленно подключиться к HBASE на EC2 с помощью Java API
  • 0 Как отключить функцию .change при загрузке страницы
  • 1 Как написать модульные тесты для методов, которые сжимают и распаковывают?
  • 0 JQuery 1.9.1 DatePicker установить опцию даты
  • 0 Проблема с cin.peek () и проблемы с получением правильного ввода
  • 1 Несоответствие типов шаблонов при обновлении данных плитки
  • 0 Ruby on Rails - неверное строковое значение MySQL
  • 1 Можно ли проверить длину значения ячейки в datagridview при вводе?
  • 0 Меню CSS не работает должным образом, если я размещаю слайд-шоу с изображениями
  • 0 Как я могу удалить выбранную строку в таблице HTML, а также в MySQL, используя CodeIgniter?
  • 1 setState не работает с кнопкой DropDown в Flutter
  • 1 Не уверен, почему мой вызов FETCH JavaScript не удается, когда сервер возвращает HttpStatus 200 OK
  • 0 изменение сгенерированного класса ng-repeat при клике
  • 0 Как отобразить кнопки «редактировать», «копировать» и «удалить» в phpMyAdmin?
  • 1 Проверка или ввод в двух текстовых полях - ASP.NET Webforms
  • 1 Удалить все изображения из файлов DOCX
  • 1 Повторение совпадения
  • 0 Как хранить несколько рабочих писем, личных и т. Д. Для одного контакта в MySQL
  • 0 Поиск данных в массиве, векторе, на карте и в списке
  • 0 PHP сравнивает массивы и заменяет значения
  • 1 Сохранение JPanel как изображения (объекта) и отрисовка его на JPanel
  • 1 Проблемы с настройкой GUI
  • 0 изменение цвета шрифта с несколькими функциями .animate на нескольких div
  • 1 Как передать параметр в JavaScript найти функцию?
  • 0 Проблема CSS - что вызывает эту вертикальную линию?
  • 1 Java разбирает строковую дату на MilliSecond
  • 1 Почему TextReader жалуется, когда файл открывается другим процессом?
  • 1 Wikitude Передача значения из Java в JavaScript для использования в AR.RelativeLocation
  • 1 Хранение и доступ к данным в py-файле
  • 0 Модель и DataTransformer не работают в Symfony2
  • 1 Не может наследовать внутри того же пакета в Java
  • 0 JQUERY установить clearInterval через время
  • 0 Magento - Получить сеанс GrandTotal?
  • 0 Создавайте динамические тесты с PHPUnit
  • 1 Аутентификация Firebase createUserWithEmailAndPassword не выполняется на физических устройствах с переменной для электронной почты
  • 1 Повторите задачу в течение срока с задержкой
  • 1 Определение CultureInfo свойства с помощью DataAnnotation
  • 1 Как правильно перевести метки Kmeans в метки категорий
  • 0 выбранный параметр не отображается в раскрывающемся списке Angularjs
  • 1 Что такое аннотации @TargetApi для Android
  • 1 Проверьте, является ли узел операцией или тензором в Tensorflow Graph
  • 0 Идентификация элементов по постоянному классу и динамическому идентификатору
  • 1 Поддержка старых устройств
  • 1 Боке: Не удается обновить формат всплывающей подсказки
  • 0 Получение ожидаемой ошибки неквалифицированного идентификатора с C ++ при попытке выполнить
  • 1 Как обновить свойство навигации - без изменения каких-либо других полей
  • 0 Панель инструментов кнопки jquery UI с меню
  • 0 Остановить браузер от чтения медиа-запросов
  • 1 Предварительная обработка Sklearn Imputer, когда в столбце отсутствуют значения

Изменение формы массивов, добавление и удаление осей

На предыдущем занятии мы немного познакомились со способами изменения формы массивов пакета NumPy, то есть изменением их размерностей. На этом занятии поближе рассмотрим эту тему и познакомимся с наиболее употребительными функциями и свойствами, влияющих на представление массивов.

Изменение размерности массивов

Предположим, у нас имеется массив, состоящий из десяти чисел:

a = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Мы уже знаем, что для изменения формы этого массива, достаточно указать свойству shape кортеж с новыми размерами, например, так:

a.shape = 2, 5 # массив размерностью 2x5

В результате изменится представление массива, на которое ссылается переменная a. Если же требуется создать новое представление массива, сохранив прежнее, то следует воспользоваться методом reshape():

b = a.reshape(10) # массив [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

И, как мы с вами говорили на предыдущем занятии, ссылки b и a будут использовать одни и те же данные, то есть, изменение массива через b:

b[0] = -1

приведет к изменению соответствующего элемента массива a:

array([[-1, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9]])

Об этом всегда следует помнить. Также следует помнить, что у свойства shape и метода reshape() размерность должна охватывать все элементы массива. Например, вот такая команда:

a.shape = 3, 3

приведет к ошибке, т.к. размерность 3x3 = 9 элементов, а в массиве 10 элементов. Здесь всегда должно выполняться равенство:

n1 x n2 x … x nN = число элементов массива

Но допускается делать так:

a.shape = -1, 2 # размерность 5x2

Отрицательное значение -1 означает автоматическое вычисление размерности по первой оси. По второй берется значение 2. В этом случае получим размерность 5x2.

То же самое можно делать и в методе reshape():

b.reshape(-1, 1) # размерность 10x1 b.reshape(1, -1) # размерность 1x10

Обратите внимание, в последних двух случаях мы получаем представления двумерных массивов, преобразуя одномерный. Это важный момент, так как на выходе метода reshape() получается матрица с двумя осями (строки и столбцы), тогда как изначально массив b имел только одну ось. Не случайно последнее представление отображается с двумя квадратными скобками:

array([[-1, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

Первая скобка – это первая ось (строка), а вторая скобка (вторая ось) описывает столбцы. Одномерный же массив b отображается с одной квадратной скобкой:

array([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9])

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

b.reshape(2, -1) # размерность 2x5 b.reshape(-1, 2) # размерность 5x2

Первое представление (2x5) отображается следующим образом:

array([[-1, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9]])

Здесь снова мы видим две квадратные скобки (значит, массив двумерный). Первая описывает ось axis0, отвечающую за строки, а вложенные скобки описывают вторую ось axis1, отвечающую за столбцы.

Если нам требуется многомерный массив преобразовать в обычный одномерный, то можно воспользоваться методом ravel(), который возвращает новое представление, не меняя текущего:

c = b.ravel() # с ссылается на одномерное представление массива

Если же нам нужно текущий массив преобразовать в одномерный, то это можно сделать так:

b.shape = -1

Помимо свойства shape можно использовать метод resize, который выполняет подобную операцию с текущим массивом. Например:

a.resize(2, 5) # массив 2x5

Но, как мы уже говорили, вот такая строчка приведет к ошибке:

a.resize(3, 3) # ошибка: 3x3 != 10

Однако, мы все-таки можем выполнить такую операцию, указав дополнительно флаг refcheck=False:

a.resize(3, 3, refcheck=False) # массив 3x3
a.resize(4, 5, refcheck=False) # массив 4x5

В первом случае происходит удаление одного 10-го элемента, а во втором случае – добавление 4∙5 - 3∙3 = 11 нулей. Это очень удобно, когда нам нужно менять не только форму, но и размер самого массива.

Транспонирование матриц и векторов

Очень часто в математических операциях требуется выполнять транспонирование матриц и векторов, то есть, заменять строки на столбцы. Например, если имеется матрица (двумерный массив):

a = np.array([(1, 2, 3), (1, 4, 9), (1, 8, 27)])

то операция транспонирования может быть реализована так:

b = a.T

Обратите внимание, мы здесь создаем лишь новое представление тех же самых данных массива a. И изменение элементов в массиве b:

b[0, 1] = 10

приведет к соответствующему изменению значения элемента и массива a. Это следует помнить, используя операцию транспонирования.

Транспонирование векторов работает несколько иначе. Предположим, имеется одномерный массив:

x = np.arange(1, 10)

и мы выполняем операцию транспонирования:

В результате ничего не изменилось: вектор как был строкой, так строкой и остался. Почему? Дело в том, что массив x имеет только одну размерность, поэтому здесь нет понятия строк и столбцов. Соответственно, операция транспонирования ни к чему не приводит. Чтобы получить ожидаемый эффект, нужно добавить к массиву еще одну ось, например, так:

x.shape = 1, -1

И теперь, при транспонировании получим вектор-столбец:

x.T # вектор-столбец 9x1

Добавление и удаление осей

  • np.expand_dims(a, axis) – добавление новой оси;
  • np.squeeze(a[, axis]) – удаление оси (без удаления элементов).
x_test = np.arange(32).reshape(8, 2, 2) # массив 8x2x2

И нам потребовалось добавить еще одно измерение (ось), причем, в самое начало, то есть, ось axis0. Сейчас на этой оси 8 элементов – матриц 2x2, но мы хотим сделать четырехмерный массив, сохранив остальные три оси и их данные без изменений. Как раз это достаточно просто сделать с помощью функции expand_dims, следующим образом:

x_test4 = np.expand_dims(x_test, axis=0)

Обращаясь к свойству shape:

x_test4.shape # (1, 8, 2, 2)

Видим, что массив стал четырехмерным и первая добавленная ось axis0 содержит один элемент – трехмерный массив 8x2x2. При необходимости, мы всегда можем добавить новый элемент на эту ось:

a = np.append(x_test4, x_test4, axis=0) # размерность (2, 8, 2, 2)

или удалить ненужные элементы:

b = np.delete(a, 0, axis=0) # размерность (1, 8, 2, 2)

Здесь второй параметр 0 – индекс удаляемого элемента на оси axis0. Если нам нужно добавить последнюю ось в массиве, то для этого можно записать такую команду:

b = np.expand_dims(x_test4, axis=-1) # размерность (1, 8, 2, 2, 1)

Отрицательный индекс -1 – это следующая с конца ось. Если указать индекс -2, то добавится предпоследняя ось и так далее. Отрицательные индексы очень удобно использовать при работе с массивами произвольных размерностей. Следующая функция squeeze позволяет удалить все оси с одним элементом. Например, строчка:

c = np.squeeze(b) # размерность (8, 2, 2)

превращает массив размерностью (1, 8, 2, 2) в массив размерностью (8, 2, 2). При необходимости, дополнительно мы можем самостоятельно указать оси, которые следует удалять, например, так:

c = np.squeeze(b, axis=0) # удалит только ось axis0, не затронув другие

Но, если указать ось с числом элементов больше 1, то возникнет ошибка:

c = np.squeeze(b, axis=1) # ошибка, на оси axis1 8 элементов

Объект newaxis

В NumPy добавлять новые оси иногда удобнее с помощью специального объекта np.newaxis. Например, пусть у нас есть одномерный массив:

a = np.arange(1, 10) # array([1, 2, 3, 4, 5, 6, 7, 8, 9])

У него одна ось – одно измерение. Добавим еще одну ось, допустим, в начало. С помощью объекта np.newaxis это можно сделать так:

b = a[np.newaxis, :] # добавление оси axis0 b.shape # (1, 9)

Или, можно прописать сразу две оси:

c = a[np.newaxis, :, np.newaxis] c.shape # (1, 9, 1)

Как видите, это достаточно удобная операция.

Видео по теме

© 2024 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *