编写快速函数以检查矩阵中的元素

时间:2019-05-01 17:59:12

标签: python algorithm performance sorting

我正在尝试编写一个函数,该函数检查矩阵中的元素并以布尔值返回结果的另一个矩阵。

输入:

X:如上所述的2D年龄数组列表。

输出:

该函数应返回一个2D数组,其条目如上所述为0或1。

该函数的运行速度必须比此函数快15倍:

def check_elems(X):
    out = [[0]*len(X[0]) for _ in range(len(X))]
    for i in range(len(X)):
        for j in range(len(X[i])):
            check = X[i][j]
            if check>=14 and check%5==4 and check!=19:
                out[i][j] = 1
    return out

以下是具体示例:

  • 该人年满14岁
  • 该人的年龄以4或9结尾
  • 这个人不是19

例如,年龄数组

[[22, 13, 31, 13],
 [17, 14, 24, 22]]

将具有输出数组:

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

1 个答案:

答案 0 :(得分:1)

没有numpy:

X = [[22, 13, 31, 13],
     [17, 14, 24, 22]]

%timeit check_elems(X)
%timeit [[1 if i%5==4 and i>=14 and i!=19 else 0 for i in l] for l in X]

使用标准笔记本电脑:

  

每个循环2.16 µs±15 ns(平均±标准偏差,共运行7次,每个循环100000次)

     

每个循环911 ns±2.23 ns(平均±标准偏差,共运行7次,每个循环1000000次)

编辑

正如@ user3386109所指出的那样,先前的代码不能满足OP要求的 15倍速约束,我以某种方式误读为1.5倍。我将代码作为基准。