Todo array nasce de duas formas: a partir de dados que você já tem, ou gerado na hora, com a forma que você pedir. O NumPy tem uma função para quase toda situação.
Código deste capítulo: básico/cap05_criando_arrays.py
A partir dos seus dados
O np.array converte listas (e listas de listas) em um array. Listas aninhadas viram dimensões:
Todas as linhas precisam ter o mesmo tamanho. Um array é uma grade retangular, e o NumPy recusa uma estrutura "irregular" em vez de adivinhar o que você quis dizer:
básico/cap05_criando_arrays.pylinhas 15 a 18
try:np.array([[1,2],[3]])exceptValueErroraserro:print("erro de forma irregular:","inhomogeneous"instr(erro))
Saída
erro de forma irregular: True
Arrays de preenchimento: você dá a forma
Quando você ainda não tem os valores, mas sabe a forma, os arrays de preenchimento reservam o espaço. A forma é uma tupla, e é aí que mora o erro mais comum:
Escrevendo np.zeros(2, 3), o NumPy entende o 3 como o tipo de dado (o segundo parâmetro), e por isso a mensagem fala em "data type". A forma é um único argumento: np.zeros((2, 3)), com parênteses duplos.
O np.empty também reserva a forma, mas não inicializa a memória: o conteúdo é o que já estava lá, e não zero. Ele é um pouco mais rápido que o zeros, e só serve quando você vai sobrescrever todos os valores logo em seguida. Eu raramente o uso, porque o ganho é pequeno e o risco de ler lixo é real.
O np.eye(3) é a matriz identidade (uns na diagonal). O np.diag monta uma matriz diagonal a partir de uma lista, e, se receber uma matriz, faz o caminho inverso e extrai a diagonal.
O arange funciona como o range do Python: início, fim (excluído) e passo. O linspace recebe o número de pontos e inclui os dois extremos. O logspace espaça os pontos em escala logarítmica, de 10⁰ a 10², três pontos.
arange com passo decimal
Com passos decimais, o arange acumula erro de ponto flutuante e pode surpreender no tamanho do resultado. Quando você sabe quantos pontos quer, o linspace é mais previsível: