Poucos alunos submeteram a tarefa 11 e muitos deles propuseram soluções total ou parcialmente erradas.
Algumas soluções
def desigual(a,b):
while True:
xa = next(a)
xb= next(b)
if xa==xb:
yield (xa,xb)
-- o zip funciona para iterators
def desigual(a,b)
for xa,xb in zip(a,b)
if xa==xb:
yield (xa,xb)
class desigual:
def __init__(self,a,b):
self.a=a
self.b=b
def __iter__(self):
return self
def __next__(self):
while True
xa = next(self.a)
xb = next(self.b)
if xa==xb:
return (xa,xb)
Note o return
na classe desigual
(e nao yield
)
nao precisa tratar da exceção stopIteraction
. Se ela aconteces no next
e voce nao tratar dela, ela sobe, e isso é examente o que vc quer - quem esta chamando seu iterator recebe o stopIteraction
.
Em particular alguns fizeram isso
def desigual(a,b)
try:
for xa,xb in zip(a,b)
if xa==xb:
yield (xa,xb)
except stopIteration:
pass
que é o que vc nao quer fazer - voce mata a exceção que veio do next
mas nao avisa que esta usando o seu iterator.
Rodar in ipython
import numpy as np
def g1():
global x
for i in range(x.shape[0]):
for j in range(x.shape[1]):
if x[i,j] < 0.5:
x[i,j]=0.0
return None
def g2():
global x
x[x<0.5]=0.0
return None
y = np.random.rand(4000,30)
x = np.array(y,copy=True)
%timeit g1()
x = np.array(y,copy=True)
%timeit g2()
import numpy as np
def f1(x):
out = np.empty(x.shape[1])
for j in range(x.shape[1]):
s=0
for i in range(x.shape[0]):
s+=x[i,j]
out[j]=s
return out
def f2(x):
return np.sum(x,axis=0)
a = np.random.rand(1000,1000)
%timeit f1(a)
%timeit f2(a)
np.log
+ - / *
axis
- faz a operação de resume através dessa dimensão - sobram as outras
a = np.arange(24).reshape(3,4,2)
a
np.sum(a,axis=0)
np.amax(a,axis=(1,2))
https://numpy.org/doc/stable/reference/routines.array-manipulation.html#joining-arrays
concatenate
- numa dimensão que ja existejoin
numa nova dimensãohttps://numpy.org/doc/stable/reference/routines.linalg.html
Formato interno para matrizes npy
Texto
csv
de uma olhada no 4 video de https://www.youtube.com/watch?v=rN0TREj8G7U&list=PLeo1K3hjS3uset9zIVzJWqplaWBiacTEU]] que fala sobre uma função util para fazer iteração em arrays.
Extensões tipo C do python https://cython.org/
Veja a função Primes em https://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html
curso sobre cython https://nyu-cds.github.io/python-cython/
Ha poucos sites discutindo cython + numpy
dado 1 array 1D, troque todos os valores > 0 para 1 e os < 0 para -1
Dado uma matriz, normalize as linhas de forma que a norma (soma dos quadrados) das linhas seja 1.
normalize as linhas cujos elementos na primeira coluna são negativo
compute uma array 1D com o item de menor valor absoluto para cada coluna.