| | | |

Minicurso de Python para Matemática

Material disponível para compra: e-book livro. Consulte outras formas de colaboração aqui!

4.1 NumPy array

Um numpy.array é uma tabela de valores (vetor, matriz ou multidimensional) e contém informação sobre os dados brutos, indexação e como interpretá-los. Os elementos são todos do mesmo tipo (diferente de uma lista Python), referenciados pela propriedade dtype. A indexação dos elementos pode ser feita por um tuple de inteiros não negativos, por booleanos, por outro numpy.array ou por números inteiros. O ndim de um numpy.array é seu número de dimensões (chamadas de axes111axes, do inglês, plural de axis, eixo.). O numpy.ndarray.shape é um tuple de inteiros que fornece seu tamanho (número de elementos) em cada dimensão. Sua inicialização pode ser feita usando-se listas simples ou encadeadas. Por exemplo,

1a = np.array([1, 3, -1, 2])
2print(a)
[ 1 3 -1 2]
1a.dtype
dtype('int64')
1a.shape
(4,)
1a[2]
-1
1a[1:3]
array([ 3, -1])

temos um numpy.array de números inteiros com quatro elementos dispostos em um único axis (eixo). Podemos interpretá-lo como uma representação de um vetor linha ou coluna, i.e.

a=(1,3,1,2) (4.1)

vetor coluna ou aT vetor linha.

Outro exemplo,

1a = np.array([[1.0,2,3],
2 [-3,-2,-1]])
3a.dtype
dtype('float64')
1a.shape
(2, 3)
1a[1,1]
-2.0

temos um numpy.array de números decimais (float) dispostos em um arranjo com dois axes (eixos). O primeiro axis tem tamanho 2 e o segundo tem tamanho 3. Ou seja, podemos interpretá-lo como uma matriz de duas linhas e três colunas. Podemos fazer sua representação algébrica como

a=[123321] (4.2)
E. 4.1.1.

Use numpy.array para alocar:

  1. a)

    o vetor

    v=(5,π,sen(π/3)) (4.3)
  2. b)

    a matriz

    A=[11322e13] (4.4)

1import numpy as np
2# a)
3v = np.array([-5., np.pi, np.sin(np.pi/3)])
4print('v = ', v)
5# b)
6A = np.array([[-1., 1./3],
7 [2., np.sqrt(2)],
8 [np.exp(-1.), -3.]])
9print('A = \n', A)

4.1.1 Inicialização de um array

O NumPy conta com úteis funções de inicialização de numpy.array. Vejam algumas das mais frequentes:

  • numpy.zeros: inicializa um numpy.array com todos seus elementos iguais a zero.

    1np.zeros(2)
    array([0., 0.])
  • numpy.ones: inicializa um numpy.array com todos seus elementos iguais a 1.

    1np.ones((3,2), dtype='int')
    array([[1, 1],
    [1, 1],
    [1, 1]])
  • numpy.empty: inicializa um numpy.array sem alocar valores para seus elementos222Atenção! No momento da alocação, os valores dos elementos serão dinâmicos conforme “lixo” da memória..

    1np.empty(3)
    array([4.9e-324, 1.5e-323, 2.5e-323])
  • numpy.arange: inicializa um numpy.array com uma sequência de elementos333Similar à função Python range..

    1np.arange(1,6,2)
    array([1, 3, 5])
  • numpy.linspace(a, b[, num=n]): inicializa um numpy.array como uma sequência de elementos que começa em a, termina em b (incluídos) e contém n elementos igualmente espaçados.

    1np.linspace(0, 1, num=5)
    array([0. , 0.25, 0.5 , 0.75, 1. ])
E. 4.1.2.

Aloque a matriz escalar

A=[200020002] (4.5)

como um numpy.array.


1import numpy as np
2A = -2*np.ones((3,3))
3print('A = \n', A)
E. 4.1.3.

Construa um numpy.array para alocar uma partição uniforme com 11 pontos do intervalo [0,1]. Ou seja, um arranjo 𝒙=(x1,x2,,xn), de elementos xi=(i1)h, com passo h=1/(n1).


1import numpy as np
2x = np.linspace(0., 1., 11)
3print('x = ', x)

4.1.2 Manipulação de arrays

Outras duas funções importantes no tratamento de arrays são:

  • numpy.reshape: permite a alteração da forma de um numpy.array.

    1a = np.array([-2,-1])
    2print(a)
    [-2 -1]
    1b = a.reshape(2,1)
    2print(b)
    [[-2]
    [-1]]

    O numpy.reshape também permite a utilização de um coringa -1 que será dinamicamente determinado de forma obter-se uma estrutura adequada. Por exemplo,

    1a = np.array([[1,2],[3,4]])
    2print(a)
    [[1 2]
    [3 4]]
    1b = a.reshape((-1,1))
    2print(b)
    [[1]
    [2]
    [3]
    [4]]
  • numpy.transpose: computa a transposta de uma matriz.

    1a = np.array([[1,2],[3,4]])
    2print(a)
    [[1 2]
    [3 4]]
    1b = a.transpose()
    2print(b)
    [[1 3]
    [2 4]]
  • numpy.concatenate: concatena arrays.

    1a = np.array([1,2])
    2b = np.array([2,3])
    3c = np.concatenate((a,b))
    4print(c)
    [1 2 2 3]
    1a = a.reshape((1,-1))
    2b = b.reshape((1,-1))
    3d = np.concatenate((a,b), axis=0)
    4print(d)
    [[1 2]
    [2 3]]
E. 4.1.4.

Aloque o seguinte vetor como um numpy.array

𝒂=(2,3,1,1,4,5). (4.6)

Então, use o método numpy.reshape para, a partir de b, alocar a matriz

A=[1145] (4.7)

como um numpy.array.


1import numpy as np
2a = np.array([2, 3, -1, 1, 4, 5])
3A = a.reshape((3,-1))
E. 4.1.5.

Tendo em vista que

A=[32121232] (4.8)

é uma matriz ortogonal444A é dita matriz ortogonal, quando A1=AT., compute A1.


1import numpy as np
2A = np.array([[np.sqrt(3)/2, -1./2],
3 [1./2, np.sqrt(3)/2]])
4Ainv = A.transpose()
E. 4.1.6.

Considere o seguinte sistema de equações

2x1x2=3 (4.9)
x1+3x2=2 (4.10)

Use numpy.array para alocar:

  1. 1.

    a matriz de coeficientes deste sistema.

  2. 2.

    o vetor dos termos constantes deste sistema.

  3. 3.

    a matriz estendida deste sistema.


1import numpy as np
2# a)
3A = np.array([[2, -1],
4 [1, 3]])
5# b)
6b = np.array([3, -2])
7# c)
8E = np.concatenate((A, b.reshape(-1,1)), axis=1)

4.1.3 Operadores elemento-a-elemento

Os operadores aritméticos disponível no Python atuam elemento-a-elemento nos numpy.arrays. Por exemplo,

1a = np.array([1,2])
2b = np.array([2,3])
3a+b
array([3, 5])
1a-b
array([-1, -1])
1b*a
array([2, 6])
1a**b
array([1, 8])
12*b
array([4, 6])

O NumPy também conta com várias funções matemáticas elementares que operam elemento-a-elemento em arrays. Por exemplo,

1a = np.array([np.pi, np.sqrt(2)])
2a
array([3.14159265, 1.41421356])
1np.sin(a)
array([1.22464680e-16, 9.87765946e-01])
1np.exp(a)
array([23.14069263, 4.11325038])
E. 4.1.7.

Compute os valores da função cosseno para os elementos do vetor

𝜽=(0.,30,45,60,90). (4.11)

1import numpy as np
2thta = np.array([0., np.pi/6, np.pi/4,
3 np.pi/3, np.pi/2])
4y = np.cos(thta)

Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |