2017-03-27 5 views
-1

3行4列の行列を作成しようとしており、1から12までの数字が含まれています。これらの数値に因子を乗じて新しい行列を作ることができますか?ループを使って3x4行列内の要素を個別に掛ける(numpyなし)

def matrix(x): 
    matrix=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] 
    new_matrix=[[x*1,x*2,x*3],[x*4,x*5,x*6],[x*7,x*8,x*9],[x*10,x*11,x*12]] 
    print(new_matrix) 

このアプローチは動作しますが、しかし、それは、ループを使用していない、私はこのような何か、ループを使用してのアプローチを探しています:

def matrix(x): 
    for i in range(3): 
     matrix.append([]) 
     for j in range(4): 
      matrix[i].append(0) 
      return matrix 
+1

現在取得中のエラー/結果の説明を追加します。 – Svaberg

+0

エラーはありませんが、ループを使用してnumpyなしで行う必要があることを含めるのを忘れました。私は編集rnを作成します –

+0

あなたの行列が転置されているようです。通常、最初の索引は行で、2番目の索引は列です。 –

答えて

0

あなたが何かのために明示的なループを使用する必要はありませんあなたが本当に欲しいのでなければ、これのように。リストの内包表記はリストを生成するために、はるかに効率的な方法であり、forループに似た構文を持っています

ここM * Nまでの数字を含む任意のM×Nの行列を生成するための理解です:

ここ
def matrix(m, n): 
    return [[x+1 for x in range(row * n, (row + 1) * n)] for row in range(m)] 

ここで

def mult(mat, fact): 
    return [[x * fact for x in row] for row in mat] 

特定の3×4の場合の結果は次のようになります:いくつかの要因によってmatrixで返されるネストされたリストを掛けるための理解がある

>>> m = matrix(3, 4) 
>>> print(m) 
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 
>>> m2 = mult(m, 2) 
>>> print(m2) 
[[2, 4, 6, 8], [10, 12, 14, 16], [18, 20, 22, 24]] 

あなたはインデックスがあなたの元の例のように交換することにしたい場合は、単に入力mnを入れ替える:。

>>> matrix(4, 3) 
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] 

multあなたが渡す任意のネストされたリストに同じに動作します

関連する問題