Python中的矩阵

时间:2010-06-08 17:56:46

标签: python matrix

我是Python的新手,我需要从文件中读取数字并将它们存储在矩阵中,就像我在fortran或C中所做的那样;

for i
  for j
    data[i][j][0]=read(0)
    data[i][j][1]=read(1)
    data[i][j][2]=read(2)
...
...

我怎样才能在Python中做同样的事情?我读了一下,但对元组和类似的东西感到困惑

如果你能指出一个类似的例子那就很棒

感谢

6 个答案:

答案 0 :(得分:4)

Python没有多维数组,但您可以通过流行的numpy第三方包添加它们。如果你想避免使用第三方软件包,你在Python中做的就是使用列表列表列表(每个“列表”都是一维的“矢量”序列,可以保存任何类型的项目)。

例如:

data = [ [ [0 for i in range(4)] for j in range(5)] for k in range(6)]

这将列出6个项目,这些项目是5个项目的列表,这些项目是4 0的列表 - 即,6 x 5 x 4“3D矩阵”,然后您可以按照您想要的方式进行寻址,

for i in range(6):
  for j in range(5):
    data[i][j][0]=read(0)
    data[i][j][1]=read(1)
    data[i][j][2]=read(2)

初始化每个最嵌套的子列表中的四个项目中的前三个,调用那个神秘函数read,这可能是你自己想写的(我不知道应该做什么 - 不是“读取并返回下一个数字“因为它需要一个神秘的论点,但是,那么呢?”。

答案 1 :(得分:2)

答案 2 :(得分:1)

您可能希望使用numpy并使用内置函数来使用I / O,特别是loadtxt。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html

处理I / O有很多上瘾功能:

http://docs.scipy.org/doc/numpy/reference/routines.io.html

答案 3 :(得分:0)

一个简单的例子是:

data = []
with open(_filename_, 'r') as f:
    for line in f:
        data.append([int(x) for x in line.split()])

答案 4 :(得分:0)

矩阵是二维结构。在普通Python中,矩阵最自然的表示形式是列表。

因此,您可以将行矩阵写为:

[[1, 2, 3, 4]]

并将列矩阵写为:

[[1],
 [2],
 [3],
 [4]]

这也很好地扩展到 m x n 矩阵:

[[10, 20],
 [30, 40],
 [50, 60]]

有关如何在纯Python中开发完整矩阵包的示例,请参阅matfunc.py。 它的文档是here

以下是使用list-of-lists表示在普通python中进行矩阵乘法的一个经过验证的例子:

>>> from pprint import pprint
>>> def mmul(A, B):
        nr_a, nc_a = len(A), len(A[0])
        nr_b, nc_b = len(B), len(B[0])
        if nc_a != nr_b:
            raise ValueError('Mismatched rows and columns')
        return [[sum(A[i][k] * B[k][j] for k in range(nc_a))
                 for j in range(nc_b)] for i in range(nr_a)]

>>> A = [[1, 2, 3, 4]]
>>> B = [[1],
         [2],
         [3],
         [4]]

>>> pprint(mmul(A, B))
[[30]]

>>> pprint(mmul(B, A), width=20)
[[1, 2, 3, 4],
 [2, 4, 6, 8],
 [3, 6, 9, 12],
 [4, 8, 12, 16]]

正如另一位受访者所提到的,如果你认真对待矩阵工作​​,你应该安装numpy,它直接支持许多矩阵操作:

答案 5 :(得分:0)

一种将表单中的列表扩展为像矩阵一样工作的方法。我已经通过python中的其他矩阵代码,所有人都使用理解来首先初始化所需大小的列表,然后更新值(这需要更多的时间)。
让r代表行,c代表列

r = input('Enter row size: ') c = input('Enter column size: ') m = [] for i in range(r): m.append([]) for j in range(c): m[i].append(input()) for i in m: print i

在这里,您可以输入“C”或等效语言中的矩阵元素。希望这可以帮助某人实现矩阵的不同观点。