Baixe o app para aproveitar ainda mais
Prévia do material em texto
PENSAMENTO COMPUTACIONAL Fernando Esquírio Torres Criação, acesso e operadores de matrizes (Python) Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Definir matrizes em Python, a sua criação e o seu acesso. � Discutir os operadores de matrizes em Python. � Utilizar matrizes em problemas computacionais. Introdução As matrizes são utilizadas em diversas aplicações, por exemplo: na criação de objetos 2D e 3D na computação gráfica, na navegação de dispositivos móveis usados na robótica, na implementação de redes neurais artificiais, na representação de imagens digitais, entre outras. Nesse contexto, o Python é bastante utilizado para solucionar problemas dessas áreas, seja no desenvolvimento de jogos, na análise de dados em Data Science, na programação de robôs, etc. A linguagem Python oferece ferramentas para manipular matrizes, proporcionando flexibilidade e versatilidade para trabalhar com esse tipo de estrutura sequencial. As matrizes são, em algumas situações, utilizadas para correlacionar informações, podendo armazenar dados de diversos tipos. Desse modo, é importante que o programador aprenda a trabalhar com essa estrutura sequencial de dados. Neste capítulo, você vai verificar como definir matrizes em Python, como criá-las e como acessá-las. Em seguida, você vai estudar os opera- dores de matrizes na linguagem Python. Por fim, vai analisar aplicações que utilizam matrizes para resolver problemas computacionais. Matrizes em Python: criação e acesso As matrizes podem ser compreendidas como um conjunto de dados, números e/ou símbolos estruturados em duas ou mais dimensões. A estrutura matricial mais comum é a matriz bidimensional, isto é, com duas dimensões, que tem sua estrutura em forma de tabela, com os elementos organizados em linhas e colunas. Em Python, as matrizes são estruturas que armazenam seus dados sequen- cialmente e permitem o acesso individual ou em grupo aos seus elementos. Segundo Ramalho (2015), a linguagem Python classifica as matrizes por tipos de dados sequenciais; elas podem ser obtidas a partir da construção de uma lista de listas. Os grupos de valores armazenados em uma matriz podem ser do mesmo tipo ou de diferentes tipos de dados (numéricos, caracteres, strings, etc.). Além disso, as matrizes têm a propriedade de serem utilizadas como objetos iteráveis, isto é, objetos cujos elementos podem ser percorridos de forma implícita, conforme leciona Banin (2018). Segundo Barry (2018), na matemática, as matrizes bidimensionais m × n têm seus elementos organizados em m linhas e n colunas. Os elementos de uma matriz são indicados por aij, em que i e j são índices que representam, respectivamente, a linha e a coluna do elemento dentro da matriz (Figura 1). O índice i (linha) começa no valor 0 e vai até o valor m – 1, e o índice j vai de 0 até o n – 1. Desse modo, o primeiro elemento da matriz a00 está na linha 0 e na coluna 0, e o último elemento da matriz am-1n-1 está na linha m − 1 e na coluna n − 1. Essa informação será importante quando for necessário percorrer os elementos dentro de uma matriz. Figura 1. Elementos de uma matriz bidimensional m × n. Criação, acesso e operadores de matrizes (Python)2 Criação de matrizes em Python Segundo Ramalho (2015), uma matriz é uma lista de listas. Relembrando: a criação de listas é realizada com os itens sequenciais organizados entre colchetes [] e separados por vírgulas, conforme o exemplo a seguir: a = [0, 1, 2, 3, 4] Desse modo, a criação de uma matriz em Python é realizada pela agregação de listas — que não precisam ser do mesmo tamanho (número de colunas) —, organizadas sequencialmente. De acordo com Borges (2014), as listas dentro de uma matriz representam as linhas dessa matriz, e as colunas são os elementos das listas, como mostrado na declaração a seguir: matriz = [lista 1, lista 2, ..., lista N] Por exemplo, a matriz bidimensional que é mostrada a seguir possui duas listas, ou seja, duas linhas, e essas listas possuem dois elementos, ou seja, duas colunas. matriz = [[0, 1], [2, 3]] Assim como as listas, as matrizes podem armazenar itens heterogêneos, ou seja, diferentes tipos de dados. Conforme mostra o exemplo a seguir, é possível criar uma matriz com o nome de uma pessoa, que é uma sequência de caracteres, e a idade, que é um valor numérico. Observe que, nesse exemplo, as listas não precisam ter o mesmo tamanho (número de colunas). matriz = [['Pedro', 22], ['Ana', 15], ['João']] Acesso a matrizes em Python Matrizes armazenam seus dados organizados sequencialmente em seu con- teúdo. Elas permitem o acesso individual a cada um de seus elementos e podem ser utilizadas como estruturas iteráveis, conforme visto anteriormente. Lembre-se de que a localização dos elementos (aij) em uma matriz é indicada pelos índices i (linha) e j (coluna), começando a contagem sempre pelo valor 0 (zero). Então, o primeiro elemento está na posição linha 0 (zero) e coluna 3Criação, acesso e operadores de matrizes (Python) 0 (zero), o segundo elemento está na posição linha 0 (zero) e coluna 1 (um), e assim por diante. O acesso individual a um elemento específico de uma matriz é realizado pelo nome dado à matriz na sua criação e pelos índices, especificando a linha (i) e a coluna (j) entre colchetes, como mostrado na declaração abaixo. Esse comando faz a leitura de um dado da matriz localizado na posição [i][j], indicada pelos índices linha (i) e coluna (j). matriz[i][j] Caso você queira modificar o valor de um elemento específico da matriz, basta utilizar o operador de atribuição com o novo valor a ser armazenado, como mostrado no comando a seguir. Na declaração mostrada, o valor 35 é armazenado no elemento da posição linha 0 e coluna 1. matriz[0][1]=35 Observe o exemplo mostrado na Figura 2, que possui um código para fazer a leitura e a alteração de elementos de uma matriz individualmente. (b) (a) Figura 2. (a) Leitura e alteração de um elemento em uma matriz. (b) Resultado da execução do código. Criação, acesso e operadores de matrizes (Python)4 As linhas 4 e 5 do código da Figura 2a contêm os comandos matriz[0][0] e matriz[1][0], que servem para ler um elemento individualmente na matriz. O resultado da execução desses comandos é mostrado nas duas primeiras linhas da Figura 2b. Os comandos das linhas 8 e 9 modificam o conteúdo de um elemento especificado pelos índices i (linha) e j (coluna) entre colchetes. O resultado da execução desses comandos é mostrado nas duas últimas linhas da Figura 2b. Como uma matriz é uma lista de listas, o acesso a um grupo de elementos de uma matriz é construído por partes. Sendo assim, é possível acessar um conjunto de elementos da matriz das seguintes formas: � Indicando apenas a linha que se deseja acessar, por meio do comando nome_da_matriz[linha]. Esse comando acessa todos os elemen- tos da linha da matriz. � Indicando um intervalo de linhas da matriz, por meio do comando nome_da_matriz[linha inicial :linha final ]. Esse comando retornará as linhas a partir da linha inicial até a linha final – 1. Conforme leciona Downey (2016), as colunas em uma matriz são elementos dentro de listas (linhas), que estão dentro da lista maior, que é a matriz. Assim, não é possível acessá-las dessa mesma forma, sendo necessário acessar os elementos individualmente (isso será visto na próxima subseção). Caso você queira modificar uma ou mais linhas de elementos de uma matriz, basta indicar o intervalo a ser alterado e utilizar o operador de atribuição com o conjunto de valores a ser armazenado. 5Criação, acesso e operadores de matrizes (Python) Observe o exemplo mostrado na Figura 3, que possui um código para fazer a leitura e a alteração de um grupo de elementos de uma matriz. (a) (b) Figura 3. (a) Leitura e alteração de um grupo de elementos em uma matriz. (b) Resultado da execução do código. Segundo Ramalho (2015), a linha 5 do códigoda Figura 3a contém o comando numeros[0], que serve para acessar todos os elementos de uma linha. Observe na Figura 3b o resultado da execução desse comando. O comando da linha 8, nume- ros[1:3], acessa as linhas 1 e 2 da matriz, que são especificadas pelo intervalo 1:3 entre colchetes. O resultado da execução desses comandos é mostrado na segunda linha da Figura 3b. A linha 11 da Figura 3a contém o comando numeros[1] = ['A', 'B', 'C', 'D'], que modifica a lista da segunda linha da matriz. O resultado da execução desse comando pode ser observado na terceira linha impressa da Figura 3b. Repare que se pode substituir a lista completa que estava na linha selecionada pela nova lista, e essa nova lista não precisa ter os mesmos tipos e a mesma quantidade de elementos. O comando numeros[0:2] = [['W', 'X', 'Y', 'Z'],[20, 30, 40, 50]], na linha 15 da Figura 3ª, substitui as linhas 0 e 1 da matriz, indicadas pelo intervalo 0:2. O resultado da execução desse comando pode ser visualizado na quarta linha impressa da Figura 3b. Criação, acesso e operadores de matrizes (Python)6 Percorrer elementos de uma matriz em Python Na subseção anterior, foi visto como acessar individualmente os elementos de uma matriz, e os exemplos citados funcionaram de forma satisfatória para acessar poucos elementos. Mas, como proceder se for necessário acessar todos os elementos de uma matriz? Imagine uma matriz com 100 elementos — não seria prático fazer um comando para acessar cada elemento individualmente, certo? Então, existe uma solução melhor? De acordo com Perkovic (2016), em Python, é possível percorrer cada elemento de uma matriz por meio de laços de repetição (for ou while) aninhados (um laço dentro do outro), seja para preencher a matriz ou para acessar e imprimir os elementos dessa matriz. O exemplo da Figura 4 mostra um código para preencher uma matriz 2 × 3 com valores numéricos, utilizando laços de repetição aninhados, e depois acessar e imprimir esses dados formatados em uma tabela, também utilizando laços de repetição aninhados. (a) (b) (c) Figura 4. (a) Código para percorrer dados de uma matriz. (b) Entrada de dados do programa. (c) Resultado da execução do código. 7Criação, acesso e operadores de matrizes (Python) Para um melhor entendimento do código da Figura 4a, ele será explicado por partes. Na primeira parte, temos a criação da matriz com valores nulos. O comando da linha 2 cria uma matriz 2 × 3 com valores nulos; nesse caso, a dimensão da matriz foi preestabelecida (duas linhas e três colunas). Porém, segundo Banin (2018), existe uma maneira mais eficiente para popular matrizes com valores nulos, utilizando o método append (). Para o presente capítulo, essa forma é uma estratégia possível dentro do que foi ensinado para popular matrizes com valores nulos. Na segunda parte, temos o preenchimento da matriz. Os laços de repetição (for) aninhados nas linhas 6 e 7 permitem o acesso a cada elemento da matriz. O comando for da linha 6 fixa a linha da matriz, variando a variável lin entre os valores 0 e len(matriz) - 1, enquanto o comando for da linha 7 varre as colunas de cada linha, variando a variável col entre os valores 0 e len(matriz[lin]) - 1. Assim, o laço externo controla as linhas da matriz, e o laço interno, as colunas, percorrendo todos os elementos dela. Segundo Matthes (2016), o método len() retorna o tama- nho de uma lista mais externa. Por exemplo, o comando len(matriz) retorna a quantidade de linhas que estão dentro da matriz — no código da Figura 4a, temos duas linhas —, e o comando len(matriz([linha]) retorna o tamanho da lista interna de cada linha da matriz — no código da Figura 4a, temos três colunas. Desse modo, a linha percorre os índices 0 e 1, e a coluna percorre os índices 0, 1 e 2, acessando os elementos nas posições (0,0), (0,1), (0,2), (1,0), (1,1) e (1,2). O comando da linha 8 da Figura 4a, dentro dos for aninhados, solicita ao usuário um número que será armazenado em cada elemento da matriz. O resultado da execução dessa parte do código é mostrado na Figura 4b. Por fim, na terceira parte, temos a impressão da matriz. Os laços for aninhados nas linhas 14 e 15 fazem a varredura dos elementos da matriz, de modo semelhante ao explicado na parte anterior. O que difere são os comandos para imprimir os valores da matriz formatados em uma tabela, como mostrado na Figura 4c. De acordo com Slatkin (2015), pode-se imprimir os dados de uma tabela de uma maneira mais simples, sendo possível imprimir linha por linha completa ou elemento por elemento, sem a necessidade do método len(). Criação, acesso e operadores de matrizes (Python)8 O exemplo da Figura 5 mostra um código para percorrer uma matriz e imprimir seus elementos de uma maneira mais simples e prática. (a) (b) Figura 5. (a) Imprimindo uma matriz de uma forma mais simples. (b) Resultado da execução do código. O código mostrado na Figura 5a possui o comando para criação e inicialização da matriz na linha 2. O primeiro laço for na linha 6 da Figura 5a imprime as linhas da matriz. Nesse comando, for lin in matriz:, a variável lin percorre as listas; assim, a variável lin representa, a cada iteração do for, uma lin da matriz. Observe na primeira parte da Figura 5b que, no resultado da execução desse laço, as listas que compõem as linhas da matriz são impressas na tela. Nas linhas 13 e 14 da Figura 5b, o laço de repetição com fors aninhados imprime os elementos dessa matriz. O laço externo, for lin in matriz:, percorre as linhas da matriz, enquanto o laço interno, for elem in lin:, percorre os elementos dentro de cada lista (linha), ou seja, das colunas da matriz. 9Criação, acesso e operadores de matrizes (Python) Operadores de matrizes em Python A linguagem Python permite não somente acessar individualmente um ele- mento de uma matriz para ler ou alterar o seu conteúdo, mas também, utilizar operadores para manipular as matrizes. Nesta seção, você verá como funcionam o operador aditivo "+", o operador multiplicativo "*" e o operador de busca "in" e como utilizar o método len(). Operador aditivo “+” com matrizes Segundo Matthes (2016), o operador de adição “+” é utilizado para concatenar matrizes; ou seja, esse operador vai unir o conteúdo de uma matriz a outra matriz ou uma determinada lista. Portanto, deve-se ter muito cuidado ao utilizar esse operador, pois, em Python, quando os operandos envolvidos na soma forem elementos de uma lista, o resultado é a concatenação dos mesmos, e não a soma dos elementos da matriz, mesmo que eles sejam do tipo numérico. O exemplo da Figura 6 mostra um código que utiliza o operador aditivo com uma matriz. (a) (b) Figura 6. (a) Operador aditivo com matrizes. (b) Resultado da execução do código. Criação, acesso e operadores de matrizes (Python)10 O código da Figura 6a mostra, na linha 2, a criação e o preenchimento de uma matriz 2 × 3 com valores inteiros. Na linha 3 da Figura 6a, o operador aditivo “+” no comando num + num concatenou duas matrizes num, resultando em uma matriz 4 × 3; observe a nova matriz formada na linha [1]: da Figura 6b. Na linha 4 da Figura 6a, o operador aditivo “+” no comando num + [[7, 8, 9]] uniu uma nova lista (linha) na matriz num, resultando em uma matriz 3 × 3; observe a nova matriz formada na linha [2]: da Figura 6b. O mesmo acontece em matrizes com outros tipos de dados. Por exemplo, continu- ando no código da Figura 6a, na linha 7, a matriz mat 2 × 2 é criada e preenchida com valores literais (caracteres). Na linha 8 da Figura 6a, o operador aditivo “+” no comando mat + mat concatenou duas matrizes mat, resultando em uma matriz 4 × 2; observe a nova matriz na linha [3]: da Figura 6b. Na linha 9 da Figura 6a, o operador aditivo “+” no comando mat + [['E', 'F']] uniu uma nova lista (linha) na matriz num, resultando em uma matriz 3 × 2; observe a nova matriz formada na linha [4]: da Figura 6b. Operador multiplicativo “*” com matrizes Segundo Matthes (2016), ooperador multiplicativo “*” é utilizado para aumen- tar as linhas das matrizes em x vezes; ou seja, esse operador vai multiplicar a quantidade de listas dentro de uma matriz por um valor numérico desejado. Portanto, deve-se ter muito cuidado ao utilizar esse operador, pois, em Python, quando os operandos envolvidos na multiplicação forem elementos de uma lista, o resultado é a multiplicação da quantidade de listas dentro da matriz, e não a multiplicação dos elementos da matriz. 11Criação, acesso e operadores de matrizes (Python) Operador de busca “in” com matrizes Segundo Slatkin (2015), o operador de busca “in” é utilizado para procurar se um determinado conteúdo pertence a uma lista. Esse operador retorna True, caso o valor procurado pertença à lista, e False, caso não pertença. Como as linhas de uma matriz são formadas por listas, então, basta procurar em cada linha, utilizando um laço de repetição. O exemplo da Figura 7 mostra um código que utiliza o operador multiplicativo com uma matriz. (a) (b) Figura 7. (a) Operador multiplicativo com matrizes. (b) Resultado da execução do código. O código da Figura 7a mostra, na linha 2, a criação e o preenchimento de uma matriz 2 × 3 com valores inteiros. Na linha 3 da Figura 7a, o operador multiplicativo “*” no comando num * 3 triplica as listas que formam a matriz num, resultando em uma matriz 6 × 3; observe a nova matriz formada na linha [1]: da Figura 7b. Na linha 4 da Figura 7a, o operador multiplicativo “*” no comando teste = [[0]] * 10 cria uma matriz teste com 10 linhas (listas) e uma coluna preenchida com o valor 0; observe a nova matriz formada na linha [2]: da Figura 7b. Na linha 5 da Figura 7a, o operador multiplicativo “*” no comando teste_2 = [[2,3]] * 2 cria uma matriz teste_2 de tamanho 2 × 2, pois a multiplicação da lista [2,3] por 2 duplica o tamanho da lista; observe a nova matriz formada na linha [3]: da Figura 7b. Criação, acesso e operadores de matrizes (Python)12 O exemplo da Figura 8 mostra um código que utiliza o operador de busca “in” com uma matriz. (a) (b) Figura 8. (a) Operador “in” com matrizes. (b) Resultado da execução do código. O código da Figura 8a mostra, na linha 2, a criação e o preenchimento de uma matriz 3 × 2 com valores inteiros. Na linha 3 da Figura 8a, o laço de repetição for percorre cada lista da matriz e executa a busca pelo valor 1, com o comando 1 in lin, na linha 7 da Figura 8a. Observe o resultado da execução do código mostrado na Figura 8b; a única busca que retornou verdadeira foi na linha 0, onde existe o valor 1. Método len() Segundo Banin (2018), em Python, o método len() retorna o comprimento de uma lista, ou seja, a quantidade de elementos existentes nessa lista. Segundo Matthes (2016), quando o método len() é utilizado em uma matriz, ele retorna a quantidade de listas que estão dentro da matriz, ou seja, o número de linhas dela. Esse método é muito útil para compreendermos o funcionamento dos operadores aditivos e multiplicativos em Python. 13Criação, acesso e operadores de matrizes (Python) O exemplo da Figura 9 mostra um código que utiliza o método len() para mostrar a quantidade de linhas (listas) de uma matriz e a quantidade de colunas de cada linha dessa matriz. (a) (b) Figura 9. (a) Método len() utilizado com matrizes. (b) Resultado da execução do código. O código da Figura 9a contém, na linha 2, a criação de uma matriz teste construída com três listas, que não possuem o mesmo tamanho. Na linha 5 da Figura 9a, o comando len (teste) retorna a quantidade de listas (linhas) que essa matriz possui — no exemplo, três linhas. O resultado da execução desse comando pode ser observado na linha [1]: da Figura 9b. Seguindo o código da Figura 9a, o laço de repetição da linha 9, for lin in teste:, percorre as linhas da matriz teste; assim, a cada iteração do laço, a variável lin assume o valor de uma das listas da matriz. Portanto, o comando da linha 11 da Figura 9a retorna a quantidade de elementos, ou seja, colunas, de cada linha da matriz teste, o que é apontado nas linhas [2], [3] e [4] da Figura 9b. Criação, acesso e operadores de matrizes (Python)14 O exemplo da Figura 10 mostra um código que utiliza o método len() de diferentes maneiras para verificar o funcionamento dos operadores aditivo e multiplicativo. (a) (b) Figura 10. (a) Método len() utilizado com matrizes. (b) Resultado da execução do código. O código da Figura 10a contém, na linha 2, a criação de uma matriz teste cons- truída com três listas, que não possuem o mesmo tamanho. Na linha 5 da Figura 10a, o comando len (teste) retorna a quantidade de listas (linhas) que essa matriz possui — no exemplo, três linhas. O resultado da execução desse comando pode ser observado na linha [1]: da Figura 10b. Seguindo o código da Figura 10a, o comando len (teste_2) da linha 11 retorna a quantidade de listas (linhas) que a matriz teste_2 possui — no exemplo, quatro linhas; observe que, na linha 8, uma nova lista foi adicionada à matriz, por meio do operador aditivo. O resultado da execução desse comando pode ser observado na linha [2]: da Figura 10b. 15Criação, acesso e operadores de matrizes (Python) Continuando no código da Figura 10a, o comando len (teste_3) da linha 18 retorna a quantidade de listas (linhas) que a matriz teste_3 possui — no exemplo, cinco linhas; observe que, na linha 15, duas novas listas foram adicionadas à matriz, por meio do operador aditivo. O resultado da execução desse comando pode ser observado na linha [3]: da Figura 10b. Por fim, no código da Figura 10a, o comando len (teste_4) da linha 24 retorna a quantidade de listas (linhas) que a matriz teste_4 possui — no exemplo, seis linhas; observe que, na linha 21, o número de listas da matriz teste foi multiplicado por 2, ou seja, foi dobrado. O resultado da execução desse comando pode ser observado na linha [4]: da Figura 10b. Matrizes em problemas computacionais As matrizes são amplamente utilizadas no processamento digital de imagens, para armazenar digitalmente uma foto ou uma figura; dessa forma, o progra- mador pode realizar a análise de dados multidimensionais das informações contidas nessa imagem. Por exemplo, uma fotografia capturada por um robô explorador em Marte é armazenada digitalmente em forma de uma matriz, assim como uma fotografia capturada por um radar de velocidade. A análise digital de imagem já está presente no nosso dia a dia em diversas situações. Por exemplo, o Facebook consegue identificar pessoas e objetos nas fotos postadas na rede social; o Google utiliza imagens no reCAPTCHA, que é uma técnica para detectar se o usuário que está acessando determinado conteúdo é um humano ou um robô. O exemplo da Figura 11, a seguir, mostra como ler a imagem do logo do Python, mostrado na Figura 12. Essa imagem tem 1024 × 1024 pixels; ou seja, ela tem 1024 pixels de altura e 1024 pixels de largura. Além disso, ela possui quatro canais de cores, sendo três deles para o RGB (red, green e blue) e mais um canal para a escala de cinza. Nesse exemplo, são realizadas operações simples, pois o foco deste capítulo é mostrar como matrizes podem ser úteis em problemas computacionais, e não ensinar a fazer o processamento digital de imagens. Criação, acesso e operadores de matrizes (Python)16 Figura 11. (a) Código para armazenar uma imagem em uma matriz e extrair informações dela. (b) Resultado da execução do código. (a) (b) Figura 12. Logotipo do Python. Fonte: The Python… (2019, documento on-line). A linha 2 do código da Figura 11a contém a importação da biblioteca matplotlib. Essa biblioteca contém os métodos para plotagem de gráficos e para trabalhar com imagens na linguagem de programação Python. Na linha 4 da Figura 11a, o comando imagem = imread() lê uma imagem de diferentes formatos (JPG, PNG, TIFF, etc.), indicada no caminho entre parênteses, e salva em uma variável as informações da imagem, em forma de matriz (Figura 13). A função imread()utiliza métodos vetorizados, semelhantes aos laços de repetição (for ou while), para percorrer as linhas 17Criação, acesso e operadores de matrizes (Python) (altura) e as colunas (largura) da imagem e armazena esses dados em uma matriz. Lembre-se de que você deverá colocar o caminho completo da imagem como parâmetro da função imread (). Figura 13. Variável imagem com os dados digitais da imagem. Continuando no código da Figura 11a, o comando imagem.shape[], utilizado nas linhas 6, 8 e 9, retorna as propriedades, como o número de linhas, colunas e canais de cores da imagem armazenada na variável. Sendo assim, o comando imagem.shape[0] na linha 6 obtém a largura da imagem, ou seja, o número de colunas dela. O comando imagem.shape[1] obtém a altura da imagem, ou seja, o número de linhas dela. E, por fim, o comando imagem.shape[2] obtém o número de canais de cores (quatro canais). A Figura 11b mostra o resultado da execução desse código, que será impresso na tela. Criação, acesso e operadores de matrizes (Python)18 Outro exemplo muito comum do uso de matrizes em Python é para transfor- mar imagens coloridas em imagens em tons de cinza. Essa técnica é utilizada em muitas aplicações no processamento de imagens, como na detecção de borda, na impressão em preto e branco e no processamento de imagem em um único canal. A linguagem Python, juntamente com as bibliotecas mat- plotlib, pillow e numpy, permite escrever um código para converter uma imagem colorida em uma imagem em tons de cinza, conforme mostra a Figura 14a. O resultado é mostrado na Figura 14b. Figura 14. (a) Código para converter uma imagem colorida em uma imagem em tons de cinza. (b) Resultado da execução do código. (a) (b) BANIN, S. L. Python 3: conceitos e aplicações: uma abordagem didática. São Paulo: Érica, 2018, 264 p. BARRY, P. Use a cabeça! Python. 2. ed. Rio de Janeiro: Alta Books, 2018. 616 p. (Série Use a Cabeça/Head First). 19Criação, acesso e operadores de matrizes (Python) DOWNEY, A. B. Pense em Python: pense como um cientista da computação. São Paulo: Novatec, 2016. 312 p. Disponível em: https://penseallen.github.io/PensePython2e/. Acesso em: 23 jun. 2019. MATTHES, E. Curso intensivo de Python: uma introdução prática e baseada em projetos à programação. São Paulo: Novatec, 2016. 656 p. PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento de aplicações. Rio de Janeiro: LTC, 2016. 516 p. RAMALHO, L. Python fluente. São Paulo: Novatec, 2015. 800 p. SLATKIN, B. Python eficaz: 59 maneiras de programar melhor em Python. São Paulo: Novatec, 2015. 296 p. THE PYTHON Logo. Python Software Foundation, Wilmington, 2019. Disponível em: https://staging.python.org/community/logos/. Acesso em: 30 jun. 2019. Leituras recomendadas BORGES, L. E. Python para desenvolvedores: aborda Python 3.3. São Paulo: Novatec, 2014. CLARK, A. et al. Pillow - the friendly Python Imaging Library fork. Read the Docs, Portland, 2019. Disponível em: https://pillow.readthedocs.io/en/stable/. Acesso em: 30 jun. 2019. MATPLOTLIB: Python plotting. The Matplotlib development team, [S. l.], 2018. Disponível em: https://matplotlib.org/. Acesso em: 30 jun. 2019. NUMPY: the fundamental package for scientific computing with Python. NumPy de- velopers, [S. l.], 2019. Disponível em: https://www.numpy.org/. Acesso em: 30 jun. 2019. RAMALHO, L. Dados sequenciais. In: RAMALHO, L. Python fluente. São Paulo: Novatec, 2015. cap. 2. Criação, acesso e operadores de matrizes (Python)20
Compartilhar