summer_tree_home

Check iOでPython3をマスターするぜっ

Skew-symmetric matrix (Mine) - 交代行列

どんな問題?

Skew-symmetric matrix
http://www.checkio.org/mission/skew-symmetric-matrix/

交代行列かどうかを判断せよ。

交代行列って何?

交代行列とは、正方行列 A であってその転置が自身の −1倍となるものをいう。
交代行列 A は等式 AT = -A を満足する。

Wikipedia - 交代行列

だそうだ。
AT とは、前にやった転置行列のこと。

例題:

checkio([
    [ 0,  1,  2],
    [-1,  0,  1],
    [-2, -1,  0]]) == True
checkio([
    [ 0,  1, 2],
    [-1,  1, 1],
    [-2, -1, 0]]) == False
checkio([
    [ 0,  1, 2],
    [-1,  0, 1],
    [-3, -1, 0]]) == False

どうやって解く?

転置行列の問題は、zipを使って簡単に書いている人がいたっけ。

def checkio(data):
    # 転置行列を求める
    return [list(r) for r in zip(*data)]

ATの各要素をマイナスにすれば、-ATになり、それがAと一致すれば交代行列だと判断できる。

まとめ

def checkio(matrix):
    return [[-e for e in r] for r in zip(*matrix)] == matrix

http://www.checkio.org/mission/skew-symmetric-matrix/publications/natsuki/python-3/first/

簡単簡単♪