3

このラボでは、Python で 2 次元リストを操作します。次のヘッダーを使用して、行列の指定された列のすべての要素の合計を返す関数を作成します。

def sumColumn(matrix, columnIndex) 

行列の要素を行ごとに表示する関数を作成します。各行の値は別の行に表示されます (以下の出力を参照)。3 X 4 行列を読み取り、各列の合計を表示するテスト プログラム (つまり、メイン関数) を作成します。実行例は次のとおりです。

行 0 に 3 行 4 列の行列の行を入力: 2.5 3 4 1.5 行 1 に 3 行 4 列の行列の行を入力: 1.5 4 2 7.5 行 2 に 3 行 4 列の行列の行を入力: 3.5 1 1 2.5

マトリックスは 2.5 3.0 4.0 1.5 1.5 4.0 2.0 7.5 3.5 1.0 1.0 2.5

列 0 の要素の合計は 7.5 列 1 の要素の合計は 8.0 列 2 の要素の合計は 7.0 列 3 の要素の合計は 11.5

これまでの私のコードは次のとおりです。

def main():
    matrix = [[],[],[]]
    matrix[0].append(raw_input('Enter a 3-by-4 matrix row for row 0:'))
    matrix[1].append(raw_input('Enter a 3-by-4 matrix row for row 1:'))
    matrix[2].append(raw_input('Enter a 3-by-4 matrix row for row 2:'))
    print 'The matrix is:', '\n', matrix[0], '\n', matrix[1], '\n', matrix[2], '\n',   

main()    

列を一緒に追加するのに助けが必要です。使用していたマトリックスを間違って作成した可能性がありますがsum = matrix[0][0][0] + matrix[0][0][2] 、それらを追加すると、2 つの数値が単純にまとめられます。
例: 1 + 2
期待される答えが欲しい 3
出てくる 12

リストの 2 つの要素を一緒に追加する方法はありますか?

4

2 に答える 2

1

raw_input文字列を返すため、何らかの形式の数値に処理する必要があります。

float入力を要求し、空白を介してそれを分割し、それらを:にする短い例

text = raw_input('row 1: ')
nums = [float(word) for word in text.split()]

また、追加する必要はありませんmatrix = [[],[],[]]。実際には3次元構造を作成することになります。これをmatrix = []...に変更しmatrix.append(nums)、代わりに入力行があるたびに使用します。

また、無効な数値が入力された場合、または必要な数がない場合にどうなるかを検討することもできます...しかし、それは別の問題です。

于 2013-01-18T04:45:13.873 に答える
1
def main():
    f = lambda x: map(float, raw_input('Enter row %d for matrix of 3X4.\n' %(x)).split())
    matrix = [f(0),f(1),f(2)]
    print map(sum, zip(*matrix))

main()

上記のコードは、入力として 3X4 行列を受け取り、各列に合計を出力します。

説明:

難しそうlambdaに聞こえる場合は、代わりに関数を使用できます。たとえば、次のように言います。

def rowInput(x):
 return map(float, raw_input('Enter row %d for matrix of 3X4.\n' %(x)).split())

そしてそれを次のように呼び出します

matrix = [rowInput(0), rowInput(1), rowInput(2)]

このzip関数は、各行から一度に 1 つの要素を取得し、それらを合計します。

zip(...) zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

Return a list of tuples, where each tuple contains the i-th element
from each of the argument sequences. ...

zip(*matrix)戻り[(col0), (col1), (col2), (col3)]ます。


このmap関数は、最初の引数の関数を 2 番目の引数の各要素に適用します。たとえば、map(sum, zip(*matrix))は と同等[sum(col0), sum(col1), sum(col2), sum(col3)]です。

map(...) map(関数, シーケンス[, シーケンス, ...]) -> リスト

Return a list of the results of applying the function to the items of
the argument sequence(s). ...
于 2013-01-18T04:55:42.150 に答える