Python 编写快速函数检查矩阵中的元素
我正在尝试编写一个函数,它检查矩阵中的元素,并返回另一个布尔结果矩阵 输入:Python 编写快速函数检查矩阵中的元素,python,list,algorithm,performance,sorting,Python,List,Algorithm,Performance,Sorting,我正在尝试编写一个函数,它检查矩阵中的元素,并返回另一个布尔结果矩阵 输入: X:如上所述的2D age数组列表 输出: 函数应返回一个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])):
X
:如上所述的2D age数组列表
输出:
函数应返回一个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]]
没有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纳秒±2.23纳秒(7次运行的平均值±标准偏差,每个1000000个回路)
编辑
正如@user3386109所指出的,前面的代码没有满足OP所要求的15倍的速度限制,我不知何故误读为1.5倍。我把我的代码留作基线。您试用过numpy吗?您在这里问的问题是什么?它是什么python?速度快了一倍,这很好。但还没有达到问题要求的改进。嗨,我也想测试一下我的代码,这次你到底是怎么运行的?