3

私はいくつかの目的で Python を使用する必要がある Matlab ユーザーです。誰かが Python 構文で私を助けてくれれば、本当に感謝しています:

(1) Python でリストをタプルで索引付けできるというのは本当ですか? もしそうなら、どうすればいいですか?たとえば、それを使用してデータのマトリックスを表現したいと思います。

(2) data[(row,col)] のように、タプルによってインデックス付けされたリストを使用できると仮定すると、列全体を削除するにはどうすればよいですか? 私はMatlabで知っています、私は次のようなことができます

 new_data = [data(:,1:x-1) data(:,x+1:end)];

データから列 x を削除したい場合。

(3) 各行の負でない要素の数を簡単に数えることはできますか? たとえば、Matlab では、次のようなことができます。

 sum(data>=0,1)

これにより、各行の負でないエントリの数を表す列ベクトルが得られます。

どうもありがとう!

4

8 に答える 8

8

numpyを調べる必要があります。これは、この種のもののために作られています。

于 2010-01-20T02:34:32.537 に答える
3
  1. いいえ、しかし口述はできます。
  2. 「2次元配列」、行列タイプ、または何か他のものが必要なようです。もうnumpyを見ましたか?
  3. #2 から何を選択するかによって異なりますが、Pythonにはiterable に直接作用するsumやその他の関数があります。gen-exprs (ジェネレータ式) とリスト内包表記を見てください。例えば:
row_count_of_non_neg = sum(n >= 0 の場合、行の n に対して 1)
# また:
row_count_of_non_neg = sum(行の n に対して n >= 0)
# 「悪用」 True == 1 and False == 0
于 2010-01-20T02:34:48.493 に答える
2

numpyで配列(行列)を簡単に作成する方法の例を次に示します。

>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])

表示方法は次のとおりです

>>> a
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

行または列を取得する方法:

>>> a[0,:]
array([1, 2, 3])
>>> a[:,0]
array([1, 4, 7])

構文が例から明確であることを願っています!Numpyはかなり強力です。

于 2010-01-20T02:57:19.363 に答える
2

私は皆に同意します。Numpy/Scipy を使用します。しかし、ここにあなたの質問に対する具体的な答えがあります。

  1. はい。また、インデックスは組み込みリストまたは Numpy 配列のいずれかです。と仮定x = scipy.array([10, 11, 12, 13])y = scipy.array([0, 2])ます。その後x[[0, 2]]x[y]両方とも同じものを返します。

  2. new_data = scipy.delete(data, x, axis=0)

  3. (data>=0).sum(axis=1)

注意: 例 2 は、Numpy/Scipy の一般的な落とし穴を示しています。例 3 に示すように、axisプロパティは通常、配列の最初の次元に沿って操作するには 0 に設定され、2 番目の次元に沿って操作するには 1 に設定されます。しかしdelete、例 2 に示すように、次元の順序を実際に逆にするコマンドもあります。行優先と列優先です。

于 2010-01-20T05:41:58.627 に答える
0

(1) タプルを python リストのインデックスとして使うことはできないと思います。リストのリスト(例:a[i][j])を使用できますが、それはあなたのポイントではないようです。キーがタプルの辞書を使用できます。

d = { (1,1):1, (2,1):2  ... } 

(2)性能に問題がなければ、

map( lambda x: d.remove(x) if x[1] = col_number, d.keys() )

(3) フィルターを使用してそれを行うこともできます。

sum(
map( lambda x:x[1], filter(lambda x,y: x[1] == row_num and y > 0, d.items()))
)
于 2010-01-20T02:41:42.020 に答える
0

いいえ、整数以外でリストをインデックス化できるわけではありません。ただし、辞書は別のケースです。ディクショナリは、キーと値のペアで構成されるハッシュ テーブルです。キーは一意で不変でなければなりません。値は、整数、タプル、リスト、その他の辞書など、任意の型のオブジェクトにすることができます。あなたの例では、タプルは不変であるため、キーとして機能できます。一方、リストはそうではないため、辞書のキーにすることはできません。

あなたが質問した機能のいくつかは、辞書とリスト内包表記の組み合わせとして実装できます。辞書をサブクラス化し、必要な機能を実装するためにメソッドを追加する必要があるものもあります。

于 2010-01-20T02:46:19.810 に答える