NumPy Tutorial - NumPy Multidimensional Array-ndarray

Jinku Hu 30 janeiro 2023
  1. Definição de ndarray
  2. Atributos ndarray
NumPy Tutorial - NumPy Multidimensional Array-ndarray

NumPy é uma biblioteca que utiliza arrays multidimensionais como estrutura básica de dados. A única estrutura de dados no NumPy é ndarray mas não Python primitivo list data type, porque a list corre relativamente devagar.

Depois de aprender a ndarray que é a pedra angular da NumPy, você entenderá porque a NumPy pode alcançar computação de alta velocidade.

Definição de ndarray

ndarray é a abreviação de n-dimension array, ou em outras palavras - arrays multidimensionais. O ndarray é um objeto de array que representa um array multidimensional e homogêneo de itens de tamanho fixo.

As dimensões e o número de elementos são definidos pela forma, que é um tuple de N inteiros que representa o número de elementos em cada dimensão. O tipo de elemento no array é definido por dtype- data-type object.

Vamos explicar as sentenças acima em linguagem leiga. Todos os elementos armazenados no objeto ndarray devem ter o mesmo tipo e tamanho de dados.

As características do tipo de dados ndarray são resumidas como a seguir.

  1. Só podem ser armazenados elementos do mesmo tipo
  2. A quantidade de dados em cada dimensão deve ser a mesma, por exemplo 2D ndarray deve ter a mesma quantidade de elementos em cada coluna, e claro que também em cada linha.
  3. É escrito em linguagem C e pode executar a operação de matriz de forma ideal.

Atributos ndarray

Vamos listar os atributos de ndarray.

Atributos Descrição
T Transpor a matriz. Quando a matriz é 1 D, a matriz original é devolvida.
data Um objeto buffer Python que aponta para a posição inicial dos dados no array.
dtype O tipo de dados do elemento contido no ndarray.
flags Informação sobre como armazenar dados ndarray na memória (layout da memória).
flat Um iterador que converte a ndarray para um array unidimensional.
imag A parte imaginária dos dados ndarray
real Parte real dos dados da ndarray
size O número de elementos contidos no ndarray.
itemsize O tamanho de cada elemento em bytes.
nbytes A memória total (em bytes) ocupada pela ndarray.
ndim O número de dimensões contidas no ndarray.
shape A forma do ndarray (os resultados são tufos).
strides O número de bytes necessários para passar para o próximo elemento adjacente em cada direcção dimensional é representado por um tuple.
ctypes Um iterador que é processado no módulo de tipos.
base O objeto no qual ndarray está baseado (que memória está sendo referenciada).

Quando você acessa os atributos de ndarray, os dados da instância ndarray não são modificados, mesmo quando você utiliza .T para obter a transposição do objeto. Você obtém um novo objeto ndarray mas não os dados originais modificados.

Vamos dar uma olhada no significado específico de cada atributo através de códigos de exemplo.

>>> import numpy as np
>>> a = np.array([1, 2, 3])

Nós precisamos importar a biblioteca NumPy e criar um novo array 1-D. Você pode verificar seu tipo de dados e o tipo de dados de seu elemento.

>>> type(a)
numpy.ndarray
>>> a.dtype
dtype('int32')

Vamos criar um novo array 2-D e então verificar seus atributos.

>>> b = np.array([[4, 5, 6], [7, 8, 9]])
>>> b
array([[4, 5, 6],
       [7, 8, 9]])
>>> b.T     # get the transpose of b
array([[4, 7],
       [5, 8],
       [6, 9]])
>>> b       # b keeps unmodified
array([[4, 5, 6],
       [7, 8, 9]])
>>> a.size  # a has 3 elements
3
>>> b.size  # b has 6 elements
6
>>> a.itemsize # The size of element in a. The data type here is int64 - 8 bytes
8
>>> b.nbytes  # check how many bytes in b. It is 48, where 6x8 = 48
48
>>> b.shape # The shape of b
(2, 3)
>>> b.dnim # The dimensions of b
2
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook