行列のサイズを実際に使用せずに、Pythonで行列の転置を見つけようとしています。
リスト内包表記を使用して、[[row [i] for row in test] for i in range(n)]のようなことを行う必要があります。ここで、testは実際にはnを使用せずにnxn行列です。
行列のサイズを実際に使用せずに、Pythonで行列の転置を見つけようとしています。
リスト内包表記を使用して、[[row [i] for row in test] for i in range(n)]のようなことを行う必要があります。ここで、testは実際にはnを使用せずにnxn行列です。
test
がリストのリストで表される行列の場合、
zip(*test)
転置です。例えば、
In [16]: t = [[1,2,3],[4,5,6]]
In [17]: t
Out[17]: [[1, 2, 3],
[4, 5, 6]]
In [18]: zip(*t)
Out[18]: [(1, 4),
(2, 5),
(3, 6)]
(出力は、結果をより明確に表示するためにフォーマットされています)。
理解するにはzip(*t)
、まず仕組みzip
を学び、次に引数のアンパッキングを学びます。それはやや頭を悩ませますが、それがどのように機能するかを見れば、両方の概念の専門家になり、その効果は非常に楽しいものになります.
ここでリスト内包表記を使用する理由はありませんが、とにかくそれを行う方法は次のとおりです。
In [21]: [[row[i] for row in t] for i in range(len(t[1]))]
Out[21]: [[1, 4], [2, 5], [3, 6]]
(len(t[1])
列数を指定します。)
リスト内包表記は、以下のように役立ちます。
def transpose(matrix):
return [[row[col] for row in matrix] for col in range(len(matrix[0]))]
zip
との組み合わせを使用できます*
。
>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]