2

行列のサイズを実際に使用せずに、Pythonで行列の転置を見つけようとしています。

リスト内包表記を使用して、[[row [i] for row in test] for i in range(n)]のようなことを行う必要があります。ここで、testは実際にはnを使用せずにnxn行列です。

4

3 に答える 3

5

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])列数を指定します。)

于 2012-08-01T21:10:45.210 に答える
1

リスト内包表記は、以下のように役立ちます。

def transpose(matrix):
    return [[row[col] for row in matrix] for col in range(len(matrix[0]))]
于 2016-03-30T20:08:57.300 に答える
1

zipとの組み合わせを使用できます*

>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]
于 2012-08-01T21:14:44.507 に答える