Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで正方形の部分行列を転置することにより、行列を別の行列に変換できるかどうかを確認します


mat1とmat2という2つのNXMがあるとします。操作では、mat1の任意の正方形の部分行列を転置できます。与えられた操作を実行して、mat1からmat2を取得できるかどうかを確認する必要があります。

したがって、入力が次のような場合

5 6 7
1 2 3
6 8 9


5 6 2
1 7 3
6 8 9

次に、出力はTrueになります。これは、mat1のサイズ2x2の右上のサブマトリックスを転置すると、mat2が得られるためです。

これを解決するには、次の手順に従います-

  • row:=行列の行数
  • column:=行列の列数
  • 0から行-1の範囲のiの場合、実行
    • temp1:=新しいリスト、temp2:=新しいリスト
    • r:=i、col:=0
    • r> =0およびcol
    • mat1 [r、col]をtemp1に挿入します
    • mat2 [r、col]をtemp2に挿入します
    • r:=r-1、col:=col + 1
  • リストtemp1とtemp2を並べ替えます
  • 範囲0からtemp1-1のサイズのiの場合、do
    • temp1[i]がtemp2[i]と同じでない場合、
      • Falseを返す
  • 範囲1から列-1のjの場合、実行
    • temp1:=新しいリスト、temp2:=新しいリスト
    • r:=行-1、列:=j
    • r> =0およびcol
    • mat1 [r、col]をtemp1に挿入します
    • mat2 [r、col]をtemp2に挿入します
    • r:=r-1、col:=col + 1
  • リストtemp1とtemp2を並べ替えます
  • 範囲0からtemp1-1のサイズのiの場合、do
    • temp1[i]がtemp2[i]と同じでない場合、
      • Falseを返す
  • Trueを返す
  • 理解を深めるために、次の実装を見てみましょう-

    def solve(mat1, mat2):
       row = len(mat1)
       column = len(mat1[0])
       for i in range(row):
          temp1 = []
          temp2 = []
          r = i
          col = 0
          while r >= 0 and col < column:
             temp1.append(mat1[r][col])
             temp2.append(mat2[r][col])
             r -= 1
             col += 1
          temp1.sort()
          temp2.sort()
          for i in range(len(temp1)):
             if temp1[i] != temp2[i]:
                return False
       for j in range(1, column):
          temp1 = []
          temp2 = []
          r = row - 1
          col = j
          while r >= 0 and col < column:
             temp1.append(mat1[r][col])
             temp2.append(mat2[r][col])
             r -= 1
             col += 1
          temp1.sort()
          temp2.sort()
          for i in range(len(temp1)):
             if temp1[i] != temp2[i]:
                return False
       return True
    mat1 = [
          [5, 6, 7],
          [1, 2, 3],
          [6, 8, 9]]
    mat2 = [
          [5, 6, 2],
          [1, 7, 3],
          [6, 8, 9]]
    print(solve(mat1, mat2))

    入力

    [
       [5, 6, 7],
       [1, 2, 3],
       [6, 8, 9]],
    [
       [5, 6, 2],
       [1, 7, 3],
       [6, 8, 9]]

    出力

    True

    1. Pythonで行列の空のセルを選択できる方法がいくつあるかを確認するプログラム

      N x Nのバイナリ行列があり、0は空のセル、1はブロックされたセルであるとすると、すべての行とすべての列に少なくとも1つの選択されたセルがあるように、N個の空のセルを選択する方法の数を見つける必要があります。答えが非常に大きい場合は、結果mod 10 ^ 9 + 7を返します。 したがって、入力が次のような場合 0 0 0 0 0 0 0 1 0 次の構成があるため、出力は4になります(xは選択されたセルです)- これを解決するには、次の手順に従います- n:=行列のサイズ 関数f()を定義します。これ

    2. 文字列をPythonでfloatに変換できるかどうかを確認するにはどうすればよいですか?

      文字列を解析してfloatするには、次を使用できます。 try:     print float('112.15') except ValueError:     print 'Cannot parse' これにより、出力が得られます: 112.15 文字列を解析できない場合は、値エラーがスローされます。 指定した文字列のブール値を返すラッパーメソッドを作成できます。たとえば、 def isfloat(value):   try:     float(value)   &nbs