昨日私はPythonで行列型が必要でした。Pythonの行列
明らかに、この必要性に対する些細な答えはnumpy.matrix()
ですが、追加の問題は、リストと同様に、混合型の任意の値を格納する行列が欲しいということです。 numpy.matrix
はこれを実行しません。例では、あなたが見ることができるように、numpy.matrix
はコンテンツで均質でなければならない
>>> numpy.matrix([[1,2,3],[4,"5",6]])
matrix([['1', '2', '3'],
['4', '5', '6']],
dtype='|S4')
>>> numpy.matrix([[1,2,3],[4,5,6]])
matrix([[1, 2, 3],
[4, 5, 6]])
です。私の初期化で文字列値が存在する場合、すべての値は暗黙的に文字列として格納されます。これは、単一の値にアクセスすることによっても確認されます。
>>> numpy.matrix([[1,2,3],[4,"5",6]])[1,1]
'5'
>>> numpy.matrix([[1,2,3],[4,"5",6]])[1,2]
'6'
ここで、Pythonリスト型は、代わりに混合型を受け入れることができます。整数と文字列を含むリストを持つことができ、両方とも型を保存します。私が必要とするものはリストに似ていますが、マトリックスのような振る舞いで動作します。
したがって、自分のタイプを実装する必要がありました。内部実装には、リストを含むリストと辞書という2つの選択肢がありました。両方の解決法には欠点があります。
- リストにはさまざまなリストのサイズを注意深く同期させる必要があります。 2行をスワップするのは簡単です。 2つの列を交換するのは簡単ではありません。行の削除も簡単です。
- 辞書(タプルをキーとする)はやや優れていますが、キーの制限を定義する必要があります(たとえば、行列が3x3の場合は要素5,5を挿入できません)。列または行の挿入、削除、またはスワップに使用します。
編集:明確化。なぜこの機能が必要なのかという具体的な理由は、私がCSVファイルを読んでいるからです。 CSVファイル(文字列、整数、浮動小数点数など)から値を収集したら、スワップ、削除、挿入などの操作を同じように実行したいと思います。このため、私は「マトリックスリスト」が必要です。
私の好奇心は、以下のとおりです。このサービスを提供するPythonのデータ型は、すでに(そこにライブラリを「非バッテリーが含まれている」多分に)存在する場合
- は知っていますか?
- このデータ型は標準ライブラリで提供されていないのはなぜですか?あまりにも制限された関心?
- このニーズをどうやって解決しましたか?辞書、リスト、または他のスマートなソリューション?
私はcsvファイルから読み込んだ任意の値を格納する必要があり、これらの値は文字列、浮動小数点数、または整数のいずれかになります。 csvモジュールでは、CSVファイルを1行ずつ読み込むことができますが、それを「行列」として格納するには、それは私の責任です。 –
「マトリックス」はまったく記述されていません。あなたはタプルのリストを記述しています。 – kquinn
はい、そうです。しかし、残念ながら、行列のスワップ、列の入れ替え、列の挿入/削除など、行列で行う操作と同様に、このタプルのリストに対して操作を実行できるようにしたいと考えています。 –