昨天我需要 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 列表类型可以改为接受混合类型。您可以拥有一个包含整数和字符串的列表,两者都保留它们的类型。我需要的是类似于列表的东西,但以类似矩阵的行为运行。
因此,我必须实现自己的类型。对于内部实现,我有两种选择:包含列表的列表和字典。两种解决方案都有缺点:
- 列表列表需要仔细同步各种列表的大小。交换两行很容易。交换两列不太容易。删除一行也很容易。
- 字典(以元组作为键)稍好一些,但您必须定义键的限制(例如,如果您的矩阵是 3x3,则不能插入元素 5,5),并且它们使用起来更复杂、删除或交换列或行。
编辑:澄清。我需要这个功能的具体原因是因为我正在阅读 CSV 文件。从 CSV 文件中收集值(可以是字符串、整数、浮点数)后,我想执行交换、删除、插入和其他类似操作。出于这个原因,我需要一个“矩阵列表”。
我的好奇心是:
- 您知道提供此服务的 Python 数据类型是否已经存在(可能在“不包含电池”的库中)?
- 为什么标准库中没有提供这种数据类型?可能是太受限的兴趣?
- 你会如何解决这个需求?字典、列表或其他更智能的解决方案?