これは、元のマトリックス内でその場所の列を削除する必要があるか、新しい列で置き換えるかによって、2つの異なる方法で行うことができます。各方法の例を以下に示します。
どちらも、行列のすべての行が同じ長さである必要はないことに注意してください。
# in-place removal of column in matrix
matrixK = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]
for row in matrixK:
for i in reversed(range(len(row))):
if i % 2 == 0:
del row[i:i+1]
print('matrixK after: {}'.format(matrixK))
または:
# removal of columns in matrix by recreating it
matrixK = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]
matrixK = [[row[i] for i in range(len(row)) if i % 2] for row in matrixK]
print('matrixK after: {}'.format(matrixK))
両出力:完全な開示の利益のために
matrixK after: [[1, 3], [6, 8], [11, 13]]
詳細情報
、実行するための別の方法もありますので予めご了承くださいビルドを使用する列の削除非常に速いt-zip()
機能で。
コードは他の2つほど読みにくく、行列のすべての行が同じ長さの場合にのみ機能しますが、上記の2つよりも高速です。
matrixK after: [(1, 3), (6, 8), (11, 13)]
すべての行がtuple
いうよりlist
ある場合は:生産
matrixK = zip(*[row for i, row in enumerate(zip(*matrixK)) if i % 2])
。それが問題だ場合、彼らは使用してサブリストに変換することができます:
matrixK = map(list, zip(*[row for i, row in enumerate(zip(*matrixK)) if i % 2]))
これは、それを遅くんが、最初の2つの方法よりも、それはまだ多少速いです。
を望むものに依存
filter
のlambda
関数の内部状態を変更することができます。 SOはコード作成サービスではないことに注意してください。 –条件 'i%2 == 0'は、カラム0と2と4を削除します。これは、Python(および他の多くのコンピュータ言語)のndexingが0で始まるためです。 – martineau