【问题标题】:divide every item in an array of arrays in one shot一次将数组中的每个项目分开
【发布时间】:2014-04-14 03:30:11
【问题描述】:

我有一个形状为 3X4X4 的 numpy 数组,如图所示:

[[[0 0 0 2]
  [0 0 0 0]
  [1 0 0 0]
  [0 0 0 0]]

 [[0 1 0 0]
  [0 0 0 0]
  [0 0 0 0]
  [0 1 1 0]]

 [[0 0 0 0]
  [0 1 1 0]
  [0 0 1 0]
  [0 0 0 0]]]

我想将数组中每个 4 X4 矩阵中的每个数字除以 0.25。 然后我想记录所有这些值。 (因此我将每个数组中的所有值除以 0.25,然后取该数字的对数) 输出应该是相同的 3x4x4 矩阵,只是值发生了变化。 任何建议

【问题讨论】:

    标签: python logging numpy


    【解决方案1】:

    你可以这样做:

    numpy.log(yourNumpyArray / 0.25)
    

    numpy 会做正确的事(将每个元素除以 0.25)

    了解更多:

    【讨论】:

    • 来自过早的微优化部门,np.log(yourNumpyArray) - np.log(0.25) 给出了相同的结果,但用廉价的减法代替了昂贵的除法。它在我的系统上大约快 10%。
    • @Jaime 很奇怪,在我的系统中它有点相反:>>> %timeit np.log(a / 0.25) 给了100000 loops, best of 3: 8.99 µs per loop>>> %timeit np.log(a) - np.log(0.25) 导致:100000 loops, best of 3: 10.3 µs per loop(有点慢)
    • 我在一个大 (1000x1000) 阵列上运行它。很少有项目,就像在 OP 的问题中一样,对np.log 的额外调用可能会吞噬所有的改进。在我的系统上,数组中约 800 个项目发生交叉。
    • @Jaime 就是这样,然后,我用 OP 的输入进行了测试。感谢分享。 =)
    【解决方案2】:

    我不明白这有什么问题

    >> import numpy as np
    >> a = np.array([[[0, 0, 0, 2],[0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0]], [[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ,[0, 1, 1, 0]] ,[[0, 0, 0, 0], [0, 1, 1, 0] ,[0, 0, 1, 0] ,[0, 0, 0, 0]]])
    >> a
    [[[0, 0, 0, 2], [0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0]],
     [[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0]],
     [[0, 0, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 0, 0]]]
    
    >> np.log(a/0.25)
    
    array([[[       -inf,        -inf,        -inf,  2.07944154],
            [       -inf,        -inf,        -inf,        -inf],
            [ 1.38629436,        -inf,        -inf,        -inf],
            [       -inf,        -inf,        -inf,        -inf]],
    
           [[       -inf,  1.38629436,        -inf,        -inf],
            [       -inf,        -inf,        -inf,        -inf],
            [       -inf,        -inf,        -inf,        -inf],
            [       -inf,  1.38629436,  1.38629436,        -inf]],
    
           [[       -inf,        -inf,        -inf,        -inf],
            [       -inf,  1.38629436,  1.38629436,        -inf],
            [       -inf,        -inf,  1.38629436,        -inf],
            [       -inf,        -inf,        -inf,        -inf]]])
    

    【讨论】:

      【解决方案3】:
      import numpy as np
      
      arr = np.array([[[0, 0, 0, 2],[0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0]], [[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ,[0, 1, 1, 0]] ,[[0, 0, 0, 0], [0, 1, 1, 0] ,[0, 0, 1, 0] ,[0, 0, 0, 0]]])
      arr /= 0.25
      arr = np.log(arr)
      

      【讨论】:

        猜你喜欢
        • 2019-06-27
        • 2021-04-10
        • 2019-11-29
        • 2021-10-08
        • 2015-03-10
        • 2019-06-09
        • 2017-10-18
        • 2011-12-27
        • 1970-01-01
        相关资源
        最近更新 更多