昨日、Python で行列型が必要になりました。
どうやら、この必要性に対する簡単な答えは を使用すること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
、コンテンツは均一でなければなりません。初期化に文字列値が存在する場合、すべての値が文字列として暗黙的に格納されます。これは、単一の値にアクセスすることによっても確認されます
>>> 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データ型がすでに存在するかどうか知っていますか(おそらく「バッテリーを含まない」ライブラリにあります)?
- このデータ型が標準ライブラリで提供されていないのはなぜですか? 興味が制限されすぎているのでしょうか?
- このニーズをどのように解決したでしょうか。辞書、リスト、または別のよりスマートなソリューションですか?