numpy.linalg.matrix_rank()
を使用して奇妙な問題が発生しています。
私は3つの列と> 100行を持つ行列Aを持っています。 Aは0と1で構成されます。 numpy.linalg.matrix_rank(A)
を使用すると、私はanswer=3
を取得しましたが、これは正しいです。
しかし、Aと同じ長さの新しい列を追加すると(今は4つの列があります)、numpy.linalg.matrix_rank(A)
を使用すると意味をなさないanswer=1
が得られます。新しい列の数値は千単位です。すべてのデータ型はfloat32です。numpy行列ランク不正確結果
どこに問題があるか知っていますか?ありがとう!
ランダムに生成された例です。これは、40×3アレイA.
array([[ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 1., 0., 1.], [ 1., 1., 1.]], dtype=float32)
numpy.linalg.matrix_rank(A)今3
であり、Iは第4列を追加し、Aは、次のようになる:
array([[ 6.42096562e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.15370996e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.28050068e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.20350176e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.26681055e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.55057520e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.82897266e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.29479727e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.54858457e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.82017109e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.03392627e+03, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.24184062e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.90389688e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.75718145e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.67467109e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.78061758e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.52730410e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.13073359e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.51932471e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.27319297e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.41743359e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.98595469e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.40574414e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.12823730e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.66580273e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.53152070e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.84440938e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.13604375e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.59290312e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 8.91415820e+03, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.73751992e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.96208867e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.06492324e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.50155918e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.47758789e+02, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.27601094e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.77911621e+03, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.01128320e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.21259922e+04, 1.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.10147461e+03, 1.00000000e+00, 1.00000000e+00,
1.00000000e+00]], dtype=float32)
numpy.linalg.matrix_rank(A)は2です。これは可能でしょうか?
あなたは、再現性の例を提供することはできますか? –
こんにちは... StackOverflowへようこそ。質問をするときは、問題を再現できるようにする必要があります。あなたの質問には、目的、現在の結果、エラー、これまでに試したことを含める必要があります。コードと、可能であれば、再現するデータや何か正確なエラーを共有してください。ありがとう。 – Pouria
3つの列と追加する列(少なくとも上位10の値)を入力して表示できますか? 4列目の最大値は? –