2016-08-22 18 views
0

私は自分でPythonを学習していますが、行列を作成したいと思います。インターネットで読んで私が行列を定義する多くの方法を発見し、私はこれらの2つの方法を選択することにしました:Pythonの行列から列配列を選択する方法

import numpy as np 

# Method 1 
w, h = 5, 5 
M = [[0 for x in range(w)] for y in range(h)] 
M[1][2] = 100 # ok 
m = M[:,2] # <----- Why is it not possible? 

# Method 2 
A = np.zeros((5, 5)) 
A[1][2] = 100 # ok 
a = A[:,2] # <----- Why is it possible? 

どちらの場合も、私は行列を構築することができるが、私は配列を定義しようとすると問題が発生します行列自体の1つの列を選択する。 2番目のケースではaを定義することができますが、私はmについて同じことをすることはできません。私は何を間違えているのですか?

Mから列を抽出するにはどうすればよいですか?

私は、MとAは同じタイプの変数ではありませんが、正直なところ私はその違いを理解していないため、進める方法がわかりません。あなたも自分自身を発見したよう

<class 'list'> # M 
<class 'numpy.ndarray'> # A 
+1

Mから列を抽出するには 'm = [sub [2] in M]' –

+1

Numpyはこれらの種類の索引付けをサポートするライブラリです。 Pythonのリストはそうではありません。そのリストをnumpy配列に変換するには 'M = np.array(M)'を実行し、2番目の方法を使用することができます。 – ayhan

+0

ありがとう、それは問題を解決しました –

答えて

1

AMは、非常に異なるオブジェクトです。彼らは同じ情報を保存するかもしれませんが、それは違ったやり方で行い、違う方法でそれを操作することができます。彼らは異なったインターフェイスを持っています。つまり、あなたはそれらと違ったやり取りをしなければなりません。これは、実行を許可されている操作に影響します。

Mはリストのリストです。これにはいくつかの要素が含まれ、それぞれの要素は整数のリストです。 Mではありません。は行列です。の要素数が固定されています。 M[i]で個々のリストを得ることができますが、実際の行列要素を取得するには、取得したリストで作業する必要があります。 を実行することができます。その後、Mがマトリックスとして機能しなくなります。実際にMを行列として使用するには、列を取得するためにcol = [row[i] for row in M]を使用するなど、トリックを使用する必要があります。行列式を計算するためには、むしろ苦痛を伴うことになります。

Aは行列であり、その全体の内容を検査することができ、単一の列を含めて、任意の要素を取得することができます。 1つの要素を追加することは不可能です。 NumPyライブラリ全体を使用して、np.det(A)の計算式など、行列としての演算を実行できます。

+0

「リスト」はmatlabの「セル」のようですか? –

+1

はい、リストはすべての要素が任意の型である可能性があるので、リストはmatlabの1Dセル配列に似ています。 –

関連する問題