Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写快速函数检查矩阵中的元素_Python_List_Algorithm_Performance_Sorting - Fatal编程技术网

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?速度快了一倍,这很好。但还没有达到问题要求的改进。嗨,我也想测试一下我的代码,这次你到底是怎么运行的?