.... onde "inesperado" significa _Eu_ não esperava. Isso pode ser apenas uma correção de documentação, ou talvez eu seja repreendido por não perceber como np.ma
funciona, mas não acho que esse comportamento seja apropriado:
In [100]: x = np.ma.ones(5)
In [101]: x.mask = [False,False,True,False,False]
In [102]: np.copy(x)
Out[102]: array([ 1., 1., 1., 1., 1.])
In [103]: np.ma.copy(x)
Out[103]:
masked_array(data = [1.0 1.0 -- 1.0 1.0],
mask = [False False True False False],
fill_value = 1e+20)
In [104]: np.__version__
Out[104]: '1.8.0.dev-074a40c'
Eu esperaria pelo menos um aviso, mas preferiria ver, em ordem de preferência:
np.copy(x)
retorna uma matriz mascarada (já que x é uma matriz mascarada)np.copy(x)
avisa que está desmascarando a matriz e, em seguida, retorna a mesma matriz acimanp.copy(x)
levanta uma exceçãonp.copy(x)
retorna [1,1,nan,1,1]
(provavelmente não é o ideal)Ainda aberto em 1.9-devel
No entanto, não tenho certeza de como consertar isso sem matrizes especiais mascaradas.
Mudar a lógica de np.copy para incluir subok=True
na chamada para o array resolveria esse problema?
De:
return array(a, order=order, copy=True)
Para:
return array(a, order=order, subok=True, copy=True)
Em caso afirmativo, subok deve ser um parâmetro para np.copy
e qual deve ser o padrão, Verdadeiro ou Falso? True retornará o primeiro resultado preferido, False manterá o comportamento atual, mas permitirá o comportamento esperado, mas adicionando um argumento.
Não sou a favor de adicionar um parâmetro subok
a np.copy
quando já temos duas soluções completamente viáveis:
.copy()
np.array(a, subok=True)
(copia por padrão)Na verdade, eu argumentaria o contrário, já que acho que a maioria das "cópias" dá a impressão de que se obteria algo de volta que é, na verdade, uma cópia e, portanto, do mesmo tipo. Também vejo isso como uma contribuição pequena, mas útil, para tornar o todo numpy mais consistentemente capaz de lidar com subclasses (assim como fiz anteriormente com np.broadcast_arrays
, onde nenhum bom substituto estava disponível). No entanto, dada a necessidade de permanecer compatível com as versões anteriores, acho que estamos presos a um padrão de subok=False
.
De qualquer forma, @jjhelmus , por que não fazer um RP rápido e ver o que os outros pensam?
@shoyer : np.copy provavelmente deve entrar em sua lista de funções que precisam
algum tipo de suporte de array de pato - para um array de pato, acho que np.copy
e np.array provavelmente deve fazer coisas diferentes. Talvez devesse apenas ligar
arr.copy?
Na quinta-feira, 15 de outubro de 2015 às 7h, Marten van Kerkwijk <
notificaçõ[email protected]> escreveu:
Na verdade, eu argumentaria o contrário, pois acho que a maioria das "cópias" dá
a impressão de que se obteria algo que é, na verdade, uma cópia,
e, portanto, do mesmo tipo. Também vejo isso como uma contribuição pequena, mas útil
para tornar todo o numpy mais consistentemente capaz de lidar com as subclasses
(assim como fiz anteriormente com np.broadcast_arrays, onde nenhum bom substituto
estava disponível). No entanto, dada a necessidade de permanecer compatível com as versões anteriores, eu
acho que estamos presos a um padrão de subok = False.Enfim, @jjhelmus https://github.com/jjhelmus , por que não fazer uma RP rápida
e ver o que os outros pensam?-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/numpy/numpy/issues/3474#issuecomment -148395201.
Nathaniel J. Smith - http://vorpus.org
Sim, eu seria +1 em fazer np.copy tentar chamar o método de cópia em matrizes de pato.
Ainda não há razão para não apoiar subok
também. E, claro, pode-se simplesmente chamar __copy__
se ele existir.
Criado PR # 6509 que adiciona um parâmetro subok à função com um valor padrão de False . Suponho que isso abrirá alguma discussão sobre o assunto. Não tenho certeza se isso normalmente ocorre no PR, na edição ou na lista de mala direta.
A discussão da API deve estar na lista de discussão.
Em 18 de outubro de 2015, 19h37, "Jonathan J. Helmus" [email protected]
escrevi:
PR # 6509 criado https://github.com/numpy/numpy/pull/6509 que adiciona um
parâmetro _subok_ para a função com um valor padrão de _False_. Eu estou
adivinhar isso abrirá alguma discussão sobre o tópico. Não tenho certeza se isso
normalmente ocorre no PR, na edição ou na lista de mala direta.-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/numpy/numpy/issues/3474#issuecomment -149080511.
Mandarei um e-mail para a lista sobre o assunto amanhã.