首页 文章

使用包含零的numpy创建nxn矩阵的最快方法[重复]

提问于
浏览
3

这个问题在这里已有答案:

简短的问题 - 这是用python和numpy创建一个16x16(或nxn)矩阵的最快方法吗?

a = np.matrix(np.zeros((16, 16), dtype = np.int))

2 回答

  • 4

    跳过 matrix 并直接使用:

    a = np.zeros((16, 16))
    
  • 2

    加速创建此矩阵的最佳方法是完全跳过使用 matrix 类,只需使用 np.zeros

    a = np.zeros((16, 16))
    

    跳过使用 matrix 可以获得10倍的加速:

    %%timeit
    a = np.matrix(np.zeros((16, 16)))
    4.95 µs ± 50.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    
    %%timeit
    a = np.zeros((16, 16))
    495 ns ± 2.18 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    numpy.matrix has been deprecated

    注意不再建议使用此类,即使对于线性代数也是如此 . 而是使用常规数组 . 该课程将来可能会被删除 .

    Edit :Paul Panzer在评论中链接了一个很好的discussion about the reasons behind matrix's deprecation .

    人们使用 matrix 而不是 array 的一个常见原因是 a * b 将执行矩阵乘法(而不是成对乘法,就像标准 array 一样) . 但是,您现在可以使用闪亮的新矩阵乘法运算符 @ 来使用标准数组轻松执行矩阵乘法:

    a = np.arange(2*2).reshape(2,2)
    b = np.arange(2*2, 2*2*2).reshape(2,2)
    print('a\n%s\n' % a)
    print('b\n%s\n' % b)
    print('a * b (pairwise multiplication)\n%s\n' % (a * b))
    print('a @ b (matrix multiplication)\n%s\n' % (a @ b))
    

    输出:

    a
    [[0 1]
     [2 3]]
    
    b
    [[4 5]
     [6 7]]
    
    a * b (pairwise multiplication)
    [[ 0  5]
     [12 21]]
    
    a @ b (matrix multiplication)
    [[ 6  7]
     [26 31]]
    

相关问题