Numpy: np.copy(マスクされた配列)に予期しない動作があります

作成日 2013年06月26日  ·  11コメント  ·  ソース: numpy/numpy

....「予期しない」とは、_I_が予期していなかったことを意味します。 これは単にドキュメントの修正である可能性があります。または、 np.maどのように機能するかを理解していないことで叱られるかもしれませんが、この動作は適切ではないと思います。

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'

私は少なくとも警告を期待しますが、優先順に表示したいと思います。

  • np.copy(x)はマスクされた配列を返します(xはマスクされた配列であるため)
  • np.copy(x)は、配列のマスクを解除していることを警告し、上記と同じ配列を返します
  • np.copy(x)は例外を発生させます
  • np.copy(x)[1,1,nan,1,1]返します(これはおそらく理想的ではありません)
00 - Bug numpy.lib

全てのコメント11件

1.9-develでまだ開いています

ただし、特別なケーシングマスク配列なしでこれを修正する方法はわかりません。

np.copyのロジックを変更して、配列の呼び出しにsubok=Trueを含めると、この問題は修正されますか?
から:

return array(a, order=order, copy=True)

に:

return array(a, order=order, subok=True, copy=True)

もしそうなら、subokはnp.copyパラメータである必要があり、デフォルトはTrueまたはFalseである必要がありますか? Trueは最初の優先結果を返し、Falseは現在の動作を維持しますが、期待される動作を許可しますが、引数を追加します。

すでに2つの完全に実行可能なソリューションがある場合、 subokパラメーターをnp.copyに追加することに賛成しません。

  • .copy()メソッドを使用します
  • np.array(a, subok=True)使用します(デフォルトでコピーされます)

ほとんどの「コピー」は、実際にはコピーであり、したがって同じタイプの何かを取り戻すという印象を与えると思うので、私は実際には反対のことを主張します。 また、numpy全体をより一貫してサブクラスを処理できるようにするための小さいながらも有用な貢献だと思います(以前にnp.broadcast_arraysで行ったように、適切な代替手段がありませんでした)。 ただし、下位互換性を維持する必要があることを考えると、デフォルトのsubok=False固執していると思います。

とにかく、 @ jjhelmus 、簡単なPRをして、他の人の考えを見てみませんか?

@shoyer :np.copyは、おそらく必要な関数のリストに含まれているはずです
ある種のアヒル配列のサポートですが、アヒル配列の場合はnp.copyだと思います
そしてnp.arrayはおそらく異なることをするはずです。 多分それはただ呼び出す必要があります
arr.copy?

2015年10月15日木曜日午前7:00、Marten van Kerkwijk <
[email protected]>書き込み:

私は実際には反対のことを主張します、なぜなら私はほとんどの「コピー」が与えると思うからです
実際にはコピーである何かを取り戻すという印象、
したがって、同じタイプです。 小さいけれど役に立つ貢献だと思います
numpy全体をより一貫してサブクラスを処理できるようにする
(以前にnp.broadcast_arraysで行ったように、適切な代替手段はありません
利用可能でした)。 ただし、下位互換性を維持する必要があるため、私は
デフォルトのsubok = Falseで立ち往生していると思いますか。

とにかく、 @ jjhelmus https://github.com/jjhelmus 、簡単なPRをしてみませんか
他の人の考えを見てください。


このメールに直接返信するか、GitHubで表示してください
https://github.com/numpy/numpy/issues/3474#issuecomment-148395201

ナサニエルJ.スミス-http://vorpus.org

はい、np.copyにduck配列のcopyメソッドを呼び出させようとすると+1になります。

subokもサポートしない理由はまだありません。 そしてもちろん、 __copy__が存在する場合はそれを呼び出すことができます。

デフォルト値Falseで関数にsubokパラメーターを追加するPR#6509を作成しました。 これにより、このトピックに関するいくつかの議論が開かれると思います。 これが通常PR、問題、またはメーリングリストで行われるかどうかはわかりません。

APIディスカッションはメーリングリストにあるはずです。
2015年10月18日19:37、「JonathanJ.Helmus」 [email protected]
書きました:

PR#6509https ://github.com/numpy/numpy/pull/6509を作成しました。
関数の_subok_パラメーター。デフォルト値は_False_です。 私は
これを推測すると、このトピックに関するいくつかの議論が開かれます。 これかどうかわからない
通常、PR、問題、またはメーリングリストで行われます。


このメールに直接返信するか、GitHubで表示してください
https://github.com/numpy/numpy/issues/3474#issuecomment-149080511

明日、トピックのリストにメールを送信します。

このページは役に立ちましたか?
0 / 5 - 0 評価