4

以下に示すマトリックスでは、両方のマトリックスの最初の要素を一致させたいと考えています。最初の要素が等しい場合、両方の行列の 2 番目の要素と一致する必要があります。要素が同じ場合は「同じ」と出力し、そうでない場合は「同じではない」と出力します....

私の質問は、m = n が常にある m*n に対しても最適な方法でこれがどのように行われるかです。

 for i in a1:
     for j in a2:
        if i!=j:
           break
         else:
           //compare the next corresponding columns and print "same" or "not same"


 a1=[1,44,55],[2,33,66],[3,77,91]  

 a2=[1,44,55],[2,45,66],[3,77,91]    

 OR 

 a1=[1,44,55]
    [2,33,66]
    [3,77,91]  

 a2=[1,44,55]
    [2,45,66]
    [3,77,91]  
4

5 に答える 5

14

浮動小数点の丸め誤差が原因で、いくつかの問題が発生する場合があります。

>>> import numpy as np
>>> x = np.array(1.1)
>>> print x * x
1.21
>>> x * x == 1.21
False
>>> x * x
1.2100000000000002
>>> np.allclose(x * x, 1.21)
True

2 つの数値行列が等しいかどうかを比較するには、以下を使用することをお勧めします。np.allclose()

>>> import numpy as np
>>> x = np.array([[1.1, 1.3], [1.3, 1.1]])
>>> y = np.array([[1.21, 1.69], [1.69, 1.21]])
>>> x * x
array([[ 1.21,  1.69],
       [ 1.69,  1.21]])
>>> x * x == y
array([[False, False],
       [False, False]], dtype=bool)
>>> np.allclose(x * x, y)
True
于 2012-08-02T17:48:33.870 に答える
9

何が問題なのa1 == a2ですか?

In [1]: a1=[[1,44,55],
   ...:     [2,33,66],
   ...:     [3,77,91]]

In [2]: a2=[[1,44,55],
   ...:     [2,45,66], # <- second element differs
   ...:     [3,77,91]]

In [3]: a1 == a2
Out[3]: False

In [4]: a1=[[1,44,55],
   ...:     [2,33,66],
   ...:     [3,77,91]]

In [5]: a2=[[1,44,55],
   ...:     [2,33,66],
   ...:     [3,77,91]]

In [6]: a1 == a2
Out[6]: True
于 2012-06-01T13:41:24.553 に答える
1

行列を操作したい場合numpyは、使用できる最高のライブラリです

In [11]: a = numpy.matrix([[1,44,55],
    ...:                   [2,33,66],
    ...:                   [3,77,91]])

In [12]: b = numpy.matrix([[1,44,55],
    ...:                   [2,45,66],
    ...:                   [3,77,91]])

In [13]: a == b
Out[13]: 
matrix([[ True,  True,  True],
        [ True, False,  True],
        [ True,  True,  True]], dtype=bool)
于 2012-06-01T13:45:10.460 に答える