我正在尝试编写一个函数,该函数检查矩阵中的元素并以布尔值返回结果的另一个矩阵。
输入:
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
以下是具体示例:
例如,年龄数组
[[22, 13, 31, 13],
[17, 14, 24, 22]]
将具有输出数组:
[[0, 0, 0, 0],
[0, 1, 1, 0]]
答案 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倍。我将代码作为基准。