当前位置 主页 > 网站技术 > 代码类 >

    Python操作多维数组输出和矩阵运算示例

    栏目:代码类 时间:2019-11-28 15:06

    本文实例讲述了Python操作多维数组输出和矩阵运算。分享给大家供大家参考,具体如下:

    在许多编程语言中(Java,COBOL,BASIC),多维数组或者矩阵是(限定各维度的大小)预先定义好的。而在Python中,其实现更简单一些。

    如果需要处理更加复杂的情形,可能需要使用Python的数学模块包NumPy,链接地址:http://numpy.sourceforge.net/

    首先来看一个简单的二维表格。投掷两枚骰子时,有36种可能的结果。我们可以将其制成一个二维表格,行和列分别代表一枚骰子的得数:

     1 2 3 4 5 6
    1 2 3 4 5 6 7
    2 3 4 5 6 7 8
    3 4 5 6 7 8 9
    4 5 6 7 8 9 10
    5 6 7 8 9 10 11
    6 7 8 9 10 11 12

    在Python中,一个像这样的多维表格可以通过“序列的序列”实现。一个表格是行的序列。每一行又是独立单元格的序列。这类似于我们使用的数学记号,在数学里我们用Ai,j,而在Python里我们使用A[i][j],代表矩阵的第i行第j列。

    这看起来非常像“元组的列表”(Lists of Tuples)。

    “列表的列表”示例

    我们可以使用嵌套的列表推导式(list comprehension)创建一个表格。 下面的例子创建了一个“序列的序列”构成的表格,并为表格的每一个单元格赋值。

    table= [[0 for i in range(6)] for j in range(6)]
    print(table)
    for d1 in range(6):
      for d2 in range(6):
        table[d1][d2]= d1+d2+2
    print(table)
    
    

    程序的输出结果如下:

    [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]
    [[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],
    [5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]

    这个程序做了两件事:创建了一个6 × 6的全0表格。 然后使用两枚骰子的可能组合的数值填充表格。 这并非完成此功能最有效的方式,但我们通过这个简单的例子来演示几项技术。我们仔细看一下程序的前后两部分。

    程序的第一部分创建并输出了一个包含6个元素的列表,我们称之为“表格”;表格中的每一个元素都是一个包含6个0元素的列表。它使用列表推导式,对于范围从0到6的每一个j都创建对象。每一个对象都是一个0元素列表,由i变量从0到6遍历产生。初始化完成之后,打印输出二维全0表格。

    推导式可以从里向外阅读,就像一个普通表达式一样。内层列表[ 0 for i in range(6) ]创建了一个包含6个0的简单列表。外层列表[ [...] for j in range(6) ]创建了这些内层列表的6个深拷贝。

    程序的第2个部分对2个骰子的每一个组合进行迭代,填充表格的每一个单元格。这由两层嵌套循环实现,每一个循环迭代一个骰子。外层循环枚举第一个骰子的所有可能值d1。内层循环枚举第二个骰子d2。

    更新每一个单元格时需要通过table[d1]选择每一行;这是一个包含6个值的列表。这个列表中选定的单元格通过...[d2]进行选择。我们将掷骰子的值赋给这个单元格,d1+d2+2

    其他示例

    打印出的列表的列表不太容易阅读。下面的循环会以一种更加可读的形式显示表格。

    >>> 
    for row in table:
    ... 
      print row
    ... 
    [2, 3, 4, 5, 6, 7]
    [3, 4, 5, 6, 7, 8]
    [4, 5, 6, 7, 8, 9]
    [5, 6, 7, 8, 9, 10]
    [6, 7, 8, 9, 10, 11]
    [7, 8, 9, 10, 11, 12]