当前位置:  开发笔记 > 编程语言 > 正文

Python中的矩阵

如何解决《Python中的矩阵》经验,为你挑选了2个好方法。

昨天我需要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数据类型是否已经存在(可能在"非电池包含"库中)?

为什么标准库中没有提供此数据类型?利息太受限制了吗?

你怎么解决这个需求?字典,列表或其他更智能的解决方案?

Autoplectic.. 11

如果你dtypeobject:你可以有不同类型的:

In [1]: m = numpy.matrix([[1, 2, 3], [4, '5', 6]], dtype=numpy.object)
In [2]: m
Out[2]: 
matrix([[1, 2, 3],
        [4, 5, 6]], dtype=object)
In [3]: m[1, 1]
Out[3]: '5'
In [4]: m[1, 2]
Out[4]: 6

除了花哨的索引之外,我不知道你有什么好处,因为正如Don指出的那样,你不能用这个矩阵做数学.



1> Autoplectic..:

如果你dtypeobject:你可以有不同类型的:

In [1]: m = numpy.matrix([[1, 2, 3], [4, '5', 6]], dtype=numpy.object)
In [2]: m
Out[2]: 
matrix([[1, 2, 3],
        [4, 5, 6]], dtype=object)
In [3]: m[1, 1]
Out[3]: '5'
In [4]: m[1, 2]
Out[4]: 6

除了花哨的索引之外,我不知道你有什么好处,因为正如Don指出的那样,你不能用这个矩阵做数学.



2> Don Werve..:

我很好奇你为什么要这个功能; 据我所知,有矩阵(numpy)的原因主要是进行线性数学运算(矩阵变换等).

我不确定数字定义对于十进制和字符串的乘积是什么.

在内部,您可能希望查看稀疏矩阵实现(http://www.inf.ethz.ch/personal/arbenz/pycon03_contrib.pdf).有很多方法可以做到这一点(哈希,列表,链表),每个方法都有自己的优点和缺点.如果您的矩阵不会有很多空值或零,那么您可以放弃稀疏实现.


@Stefano:只是因为矩阵对象恰好有交换/插入/删除行和列的方法并不意味着它应该是你应该使用的数据结构.矩阵用于你可以乘法,加,减,取幂,计算特征值和特征向量等的东西.
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有