You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: online/cap11.adoc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -722,7 +722,7 @@ Como revela o <<mem_test_demo>>, o uso de RAM do script cresce para 1,55 GB quan
722
722
723
723
[TIP]
724
724
====
725
-
Se você precisa manipular milhões de objetos com dados numéricos, deveria na verdade estar usando os arrays do NumPy (veja a <<numpy_sec>>), que são eficientes no de uso de memória, e também tem funções para processamento numérico extremamente otimizadas, muitas das quais operam sobre o array inteiro ao mesmo tempo. Projetei a classe `Vector2d` apenas como um contexto para a discussão de métodos especiais, pois sempre que possível tento evitar exemplos vagos com `Foo` e `Bar`.
725
+
Se você precisa manipular milhões de objetos com dados numéricos, deveria na verdade estar usando os arrays da NumPy (veja a <<numpy_sec>>), que são eficientes no de uso de memória, e também tem funções para processamento numérico extremamente otimizadas, muitas das quais operam sobre o array inteiro ao mesmo tempo. Projetei a classe `Vector2d` apenas como um contexto para a discussão de métodos especiais, pois sempre que possível tento evitar exemplos vagos com `Foo` e `Bar`.
Copy file name to clipboardExpand all lines: online/cap13.adoc
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1296,7 +1296,7 @@ False
1296
1296
----
1297
1297
====
1298
1298
<1> `complex64` é um dos cinco tipos de números complexos fornecidos pelo NumPy.
1299
-
<2> Nenhum dos tipos complexos do NumPy é subclasse do `complex` embutido.
1299
+
<2> Nenhum dos tipos complexos da NumPy é subclasse do `complex` embutido.
1300
1300
<3> Mas os tipos complexos de NumPy implementam `+__complex__+`, então cumprem o protocolo `SupportsComplex`.
1301
1301
<4> Portanto, você pode criar objetos `complex` a partir deles.
1302
1302
<5> Infelizmente, o tipo `complex` embutido não implementa `+__complex__+`, apesar de [.keep-together]#`complex(c)`# funcionar sem problemas se `c` for um `complex`.
Uma outra alternativa seria usar a ABC `Complex`, definida no módulo `numbers`.
1313
-
O tipo embutido `complex` e os tipos `complex64` e `complex128` do NumPy são todos registrados como subclasses virtuais de `numbers.Complex`, então isso aqui funciona:
1313
+
O tipo embutido `complex` e os tipos `complex64` e `complex128` da NumPy são todos registrados como subclasses virtuais de `numbers.Complex`, então isso aqui funciona:
1314
1314
1315
1315
[source, python]
1316
1316
----
@@ -1666,7 +1666,7 @@ Para encerrar o capítulo, vamos olhar as ABCs numéricas e sua possível substi
1666
1666
Como((("static protocols", "numbers ABCS and numeric protocols", id="SPnumbers13")))((("numbers ABCs", id="number13")))((("numeric protocols", id="numpro13")))((("protocols", "numeric", id="Pnum13"))) vimos em <<numeric_tower_warning>>, as ABCs no pacote `numbers` da biblioteca padrão funcionam bem para checagem de tipos durante a execução.
1667
1667
1668
1668
Se você precisa verificar um inteiro, pode usar `isinstance(x, numbers.Integral)` para aceitar `int`, `bool` (que é subclasse de `int`) ou outros tipos inteiros oferecidos por bibliotecas externas que registram seus tipos como subclasses virtuais das ABCs de `numbers`.
1669
-
Por exemplo, o NumPy tem https://fpy.li/13-39[21 tipos inteiros] — bem como várias variações de tipos de ponto flutuante registrados como `numbers.Real`, e números complexos com várias amplitudes de bits, registrados como `numbers.Complex`.
1669
+
Por exemplo, a NumPy tem https://fpy.li/13-39[21 tipos inteiros] — bem como várias variações de tipos de ponto flutuante registrados como `numbers.Real`, e números complexos com várias amplitudes de bits, registrados como `numbers.Complex`.
1670
1670
1671
1671
[TIP]
1672
1672
====
@@ -1709,7 +1709,7 @@ Por alguma razão, ele também implementa `+__int__+`.
1709
1709
A presença desses métodos faz `isinstance` produzir resultados enganosos no Python 3.9. No Python 3.10, os métodos de `complex` que geravam `TypeError` incondicionalmente foram removidos.footnote:[ver
Por outro lado, os tipos complexos do NumPy implementam métodos `+__float__+` e `+__int__+` que funcionam,
1712
+
Por outro lado, os tipos complexos da NumPy implementam métodos `+__float__+` e `+__int__+` que funcionam,
1713
1713
emitindo apenas um aviso quando cada um deles é usado pela primeira vez:
1714
1714
1715
1715
[source, python]
@@ -1726,8 +1726,8 @@ discards the imaginary part
1726
1726
1727
1727
O problema oposto também acontece:
1728
1728
Os tipos embutidos `complex`, `float`, e `int`, além `numpy.float16` e `numpy.uint8`, não
1729
-
tem um método `+__complex__+`, então `isinstance(x, SupportsComplex)` retorna `False` para eles.footnote:[Eu não testei todas as outras variantes de _float_ e _integer_ que o NumPy oferece.]
1730
-
Os tipo complexos do NumPy, tal como `np.complex64`, implementam `+__complex__+` para conversão em um `complex` embutido.
1729
+
tem um método `+__complex__+`, então `isinstance(x, SupportsComplex)` retorna `False` para eles.footnote:[Eu não testei todas as outras variantes de _float_ e _integer_ que a NumPy oferece.]
1730
+
Os tipo complexos da NumPy, tal como `np.complex64`, implementam `+__complex__+` para conversão em um `complex` embutido.
1731
1731
1732
1732
Entretanto, na prática, o construtor embutido `complex()` trabalha com instâncias de todos esses tipos sem erros ou avisos.
No momento em que escrevo isso, o NumPy não tem dicas de tipo, então seus tipos numéricos são todos `Any`.footnote:[Os tipos numéricos do NumPy são todos registrados com as ABCs apropriadas de `numbers`, que o Mypy ignora.]
1758
+
No momento em que escrevo isso, a NumPy não tem dicas de tipo, então seus tipos numéricos são todos `Any`.footnote:[Os tipos numéricos da NumPy são todos registrados com as ABCs apropriadas de `numbers`, que o Mypy ignora.]
1759
1759
Por outro lado, o Mypy de alguma maneira "sabe" que o `int` e o `float` embutidos podem ser convertidos para `complex`,
1760
1760
apesar de, no _typeshed_, apenas a classe embutida `complex` ter o método `+__complex__+`.footnote:[Isso é uma mentira bem intencionada da parte do typeshed: a partir de Python 3.9, o tipo embutido `complex` na verdade não tem mais um método `+__complex__+`.]
Está claro que operadores infixos tornam as fórmulas mais legíveis.
32
-
A sobrecarga de operadores é necessária para suportar a notação infixa de operadores com tipos definidos pelo usuário ou estendidos, tal como os arrays do NumPy.
32
+
A sobrecarga de operadores é necessária para suportar a notação infixa de operadores com tipos definidos pelo usuário ou estendidos, tal como os arrays da NumPy.
33
33
Oferecer a sobrecarga de operadores em uma linguagem de alto nível e fácil de usar foi provavelmente uma das principais razões do imenso sucesso de Python na ciência de dados, incluindo as aplicações financeiras e científicas.
34
34
35
35
Na <<data_model_emulating_sec>> (<<ch_data_model>>) vimos algumas implementações triviais de operadores em uma classe básica `Vector`. Os métodos `+__add__+` e `+__mul__+` no <<ex_vector2d>> foram escritos para demonstrar como os métodos especiais suportam a sobrecarga de operadores, mas deixamos passar problemas sutis naquelas implementações. Além disso, no <<ex_vector2d_v0>> notamos que o método `+Vector2d.__eq__+` considera `True` a seguinte expressão: `Vector(3, 4) == [3, 4]`—algo que pode ou não fazer sentido. Nesse capítulo vamos cuidar desses problemas, e((("operator overloading", "topics covered"))) falaremos também de:
@@ -494,13 +494,13 @@ Por anos, o produto escalar no NumPy foi escrito como `numpy.dot(a, b)`.
494
494
A notação de invocação de função faz com que fórmulas mais longas sejam difíceis de traduzir da notação matemática para Python,footnote:[Veja o <<operator_soapbox>> para uma discussão desse problema.]
495
495
então a comunidade de computação numérica fez campanha pela
496
496
https://fpy.li/pep465[PEP 465—A dedicated infix operator for matrix multiplication (_Um operador infixo dedicado para multiplicação de matrizes_)] (EN), que foi implementada no Python 3.5.
497
-
Hoje é possível escrever `a @ b` para computar o produto escalar de dois arrays do NumPy.
497
+
Hoje é possível escrever `a @ b` para computar o produto escalar de dois arrays da NumPy.
498
498
499
499
O operador `@` é suportado pelos métodos especiais `+__matmul__+`, `+__rmatmul__+`
500
500
e `+__imatmul__+`, cujos nomes derivam de "matrix multiplication" (_multiplicação de matrizes_).
501
501
Até Python 3.10, esses métodos não são usados em lugar algum na biblioteca padrão,
502
502
mas eles são reconhecidos pelo interpretador desde Python 3.5,
503
-
então os desenvolvedores do NumPy--e o resto de nós--podemos implementar o operador `@` em nossas classes.
503
+
então os desenvolvedores da NumPy--e o resto de nós--podemos implementar o operador `@` em nossas classes.
504
504
O analisador sintático de Python também foi modificado para aceitar o novo operador
Copy file name to clipboardExpand all lines: online/cap19.adoc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1036,7 +1036,7 @@ https://fpy.li/19-36[TensorFlow] e https://fpy.li/19-37[PyTorch]::
1036
1036
https://fpy.li/dask[Dask]::
1037
1037
Uma((("Dask"))) biblioteca de computação paralela que consegue delegar para processos locais ou um cluster de máquinas,
1038
1038
"testado em alguns dos maiores supercomputadores do mundo"—como seu https://fpy.li/dask[site] (EN) afirma.
1039
-
O Dask oferece APIs que emulam muito bem o NumPy, o pandas, e o scikit-learn—hoje as mais populares bibliotecas em ciência de dados e aprendizagem de máquina.
1039
+
O Dask oferece APIs que emulam muito bem a NumPy, o pandas, e o scikit-learn—hoje as mais populares bibliotecas em ciência de dados e aprendizagem de máquina.
1040
1040
O Dask pode ser usado a partir do JupyterLab ou do Jupyter Notebook, e usa o Bokeh
1041
1041
não apenas para visualização de dados mas também para um quadro interativo mostrando o fluxo de dados e o processamento entre processos/máquinas quase em tempo real.
1042
1042
O Dask é tão impressionante que recomento assistir um vídeo tal como esse, https://fpy.li/19-39[15-minute demo], onde Matthew Rocklin—um mantenedor do projeto—mostra o Dask mastigando dados em 64 núcleos distribuídos por 8 máquinas EC2 na AWS.
0 commit comments