基本問題(6)

[ edit ]

*


概要

[ edit ]

*


ヒント

この課題で使うPythonの機能 (学習のヒント)

[ edit ]

この課題の解き方 (問題解決のヒント)

[ edit ]

  • この課題の解き方 (問題解決のヒント) ....
    • 転置行列のサイズは,元の行列からわかりますので,そのサイズの行列を作ってから,値を転記すればよさそうですね.
*


実行例

[ edit ]

  • 実行例(1) ... クリックすると拡大します

fig-01

*


プログラム例: 本質的な部分 (授業中に順次公開します)

[ edit ]

  • 解答例の核心部分は,下記 7 行の関数です.

# ===== 【関数定義】 転置行列を生成し,返す
def transpose_matrix( matrix ):
    m = len( matrix )
    n = len( matrix[0] )
    result_matrix = create_zero_matrix( n, m )
    for x in range( m ):
        for y in range( n ):
            result_matrix[y][x] = matrix[x][y]
    return( result_matrix )
  • 初期値としてゼロで埋めた行列を生成する関数は,下記 5 行です.

# ===== 【関数定義】 m行n列の行列を二重リストで生成する(要素はすべてゼロ)
def create_zero_matrix( m, n ):
    matrix = list()
    for x in range( m ):
        matrix.append( [0]*n )
    return( matrix )
*


プログラム例: 配布コード (授業中に順次公開します)

[ edit ]

  • 以下の解答例を配布します.
    • 本質部分は替えませんが,コメントや,メインプログラム部分の実行例を,後々,分かり易く書き換える可能性はあります.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ==============================================================================
# * Copyright (c) 2018 IIJIMA, Tadashi
# *       (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
# ==============================================================================
# ソフトウェア工学[03] 基本課題[03]-(006a)  BP_03_006a_transpose_matrix.py
# BP(Basic Problem) 03-006a: 転置行列
#        2018-10-17 飯島 正 (iijima@ae.keio.ac.jp)
# ==============================================================================
# ===== 【関数定義】 m行n列の行列を二重リストで生成する(要素はすべてゼロ)
def create_zero_matrix( m, n ):
    matrix = list()
    for x in range( m ):
        matrix.append( [0]*n )
    return( matrix )
# ==============================================================================
# ===== 【関数定義】 m行n列の行列(二重リスト)を通し番号で埋める
def set_number_to_matrix( matrix ):
    m = len( matrix )
    n = len( matrix[0] )
    i = 0
    for x in range( m ):
        for y in range( n ):
            matrix[x][y] = i
            i += 1
# ==============================================================================
# ===== 【関数定義】 転置行列を生成し,返す
def transpose_matrix( matrix ):
    m = len( matrix )
    n = len( matrix[0] )
    result_matrix = create_zero_matrix( n, m )
    for x in range( m ):
        for y in range( n ):
            result_matrix[y][x] = matrix[x][y]
    return( result_matrix )
# ==============================================================================
# ===== 【関数定義】 行列(二重リスト)を表示する
def print_matrix( matrix ):
    m = len( matrix )
    n = len( matrix[0] )
    for x in range( m ):
        for y in range( n ):
            print( matrix[x][y], end="" )
            print( "\t", end="" )
        print()
# ==============================================================================
# ===== 【メイン・プログラム】 =====
# ----- オープニングメッセージ -----
print( "転置行列を求める: " )
print( "    ※行数と列数を与えると,通し番号を埋めた行列を作り," )
print( "    ※転置行列を求める" )
print()

# ----- パラメータの入力 -----
m = int( input( "行列の行数(正の整数)を入力してください>>> " ) );
n = int( input( "行列の列数(正の整数)を入力してください>>> " ) );
print()
print( m, "x", n, "の行列(二重リスト)を作ります", sep="" )
print()

# ----- 通し番号を埋めた行列 -----
matrix = create_zero_matrix( m, n )
set_number_to_matrix( matrix )

print( "  生成した行列(", m, "", n, "列) :" )
print_matrix( matrix )
print()

print( "  転置行列(", n, "", m, "列) :" )
tmat = transpose_matrix( matrix )
print_matrix( tmat )
print()
# ==============================================================================
*
*

SoftEng: Python/Prog/Practice/Basic/03/BP_006a (last edited 2018-10-21 12:42:31 by TadashiIijima)