想问下有没有谁很精通Python numba 库 @jit加速功能

我现在有些用pandas dataframe写的两个for循环对三万条数据处理起来非常慢,大概需要各四十秒 我需要将其加速到处理速度在十秒之内 这样是整个代码可以带的动最多五十万条数据(十分钟内)

有谁明晚或者后晚有空帮我看一下可以不? 谢谢!

话说我希望解释一下我上一条SQL付费询问最后谁也没采纳的原因,是因为所有的方法都不对,我后来重新卸载SSRS 得到错误日志,我看了一下错误日志上面显示SSRS安装路径不对,要安装在根目录,我后来据此改好了,所以因此我谁也没采纳,我不是白嫖党…我和几个回答者取得联系 他们后来不理我或者回答的不对,望知悉…就告诉一下大家我不是白嫖党 要是有帮助我肯定会采纳,谢谢!

 

1其实

 

就两个双for循环 不用很久的…

给你一个实例,对着看,修改,望采纳,谢谢

# -*- coding: utf-8 -*-
"""
@File    : xxx
@Time    : 2021/06/28 09:20
@Author  : xxx
@Software: PyCharm
"""

import time
import numpy as np
import pyrealsense2 as rs
import cv2
import sys
from numba import jit, vectorize, int64, int32, autojit


class ObstacleDetection(object):

    def __init__(self):
        # self.cam_serials = ['838212073161', '827312071726']
        self.cam_serials = ['838212073161']

    # @jit(nopython=True)
    # @jit
    # @vectorize([int64(int64, int64)], target='parallel')
    @autojit
    def traversing_pixels(self, depth_image):
        num_black = 0
        all_pixels = 0
        for pixel in depth_image.ravel():
            all_pixels += 1
            if pixel == 0:
                num_black += 1
        return [all_pixels, num_black]

    def obstacle_detection(self):
        # 摄像头个数(在这里设置所需使用摄像头的总个数)
        cam_num = 6

        ctx = rs.context()

        '''连续验证机制'''
        # D·C 1911202:创建最大验证次数max_veri_times;创建连续稳定值continuous_stable_value,用于判断设备重置后是否处于稳定状态
        max_veri_times = 100
        continuous_stable_value = 10
        print('\n', end='')
        print('开始连续验证,连续验证稳定值:{},最大验证次数:{}:'.format(continuous_stable_value, max_veri_times))
        continuous_value = 0
        veri_times = 0
        while True:
            devices = ctx.query_devices()
            connected_cam_num = len(devices)
            if connected_cam_num == cam_num:
                continuous_value += 1
                if continuous_value == continuous_stable_value:
                    break
            else:
                continuous_value = 0
            veri_times += 1
            if veri_times == max_veri_times:
                print("检测超时,请检查摄像头连接!")
                sys.exit()
            print('摄像头个数:{}'.format(connected_cam_num))

        '''循环reset摄像头'''
        # hardware_reset()后是不是应该延迟一段时间?不延迟就会报错
        print('\n', end='')
        print('开始初始化摄像头:')
        for dev in ctx.query_devices():
            # 先将设备的序列号放进一个变量里,免得在下面for循环里访问设备的信息过多(虽然不知道它会不会每次都重新访问)
            dev_serial = dev.get_info(rs.camera_info.serial_number)
            # 匹配序列号,重置我们需重置的特定摄像头(注意两个for循环顺序,哪个在外哪个在内很重要,不然会导致刚重置的摄像头又被访问导致报错)
            for serial in self.cam_serials:
                if serial == dev_serial:
                    dev.hardware_reset()
                    # 像下面这条语句居然不会报错,不是刚刚才重置了dev吗?莫非区别在于没有通过for循环ctx.query_devices()去访问?
                    # 是不是刚重置后可以通过ctx.query_devices()去查看有这个设备,但是却没有存储设备地址?如果是这样,
                    # 也就能够解释为啥能够通过len(ctx.query_devices())函数获取设备数量,但访问序列号等信息就会报错的原因了
                    print('摄像头{}初始化成功'.format(dev.get_info(rs.camera_info.serial_number)))

        '''连续验证机制'''
        # D·C 1911202:创建最大验证次数max_veri_times;创建连续稳定值continuous_stable_value,用于判断设备重置后是否处于稳定状态
        print('\n', end='')
        print('开始连续验证,连续验证稳定值:{},最大验证次数:{}:'.format(continuous_stable_value, max_veri_times))
        continuous_value = 0
        veri_times = 0
        while True:
            devices = ctx.query_devices()
            connected_cam_num = len(devices)
            if connected_cam_num == cam_num:
                continuous_value += 1
                if continuous_value == continuous_stable_value:
                    break
            else:
                continuous_value = 0
            veri_times += 1
            if veri_times == max_veri_times:
                print("检测超时,请检查摄像头连接!")
                sys.exit()
            print('摄像头个数:{}'.format(connected_cam_num))

        '''配置各个摄像头的基本对象'''
        for i in range(len(self.cam_serials)):
            locals()['pipeline' + str(i + 1)] = rs.pipeline(ctx)

            locals()['config' + str(i + 1)] = rs.config()
            locals()['config' + str(i + 1)].enable_device(self.cam_serials[i])

            locals()['config' + str(i + 1)].enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
            locals()['config' + str(i + 1)].enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)

            locals()['pipeline' + str(i + 1)].start(locals()['config' + str(i + 1)])

            # 创建对齐对象(深度对齐颜色)
            locals()['align' + str(i + 1)] = rs.align(rs.stream.color)

        '''运行摄像头'''
        try:
            while True:
                start_time = time.time()
                for i in range(len(self.cam_serials)):
                    locals()['frames' + str(i + 1)] = locals()['pipeline' + str(i + 1)].wait_for_frames()
                    # 获取对齐帧集
                    locals()['aligned_frames' + str(i + 1)] = locals()['align' + str(i + 1)].process(
                        locals()['frames' + str(i + 1)])
                    # 获取对齐后的深度帧和彩色帧
                    locals()['aligned_depth_frame' + str(i + 1)] = locals()[
                        'aligned_frames' + str(i + 1)].get_depth_frame()
                    locals()['color_frame' + str(i + 1)] = locals()['aligned_frames' + str(i + 1)].get_color_frame()

                    if not locals()['aligned_depth_frame' + str(i + 1)] or not locals()['color_frame' + str(i + 1)]:
                        continue

                    # 获取颜色帧内参
                    locals()['color_profile' + str(i + 1)] = locals()['color_frame' + str(i + 1)].get_profile()
                    locals()['cvsprofile' + str(i + 1)] = rs.video_stream_profile(
                        locals()['color_profile' + str(i + 1)])
                    locals()['color_intrin' + str(i + 1)] = locals()['cvsprofile' + str(i + 1)].get_intrinsics()
                    locals()['color_intrin_part' + str(i + 1)] = [locals()['color_intrin' + str(i + 1)].ppx,
                                                                  locals()['color_intrin' + str(i + 1)].ppy,
                                                                  locals()['color_intrin' + str(i + 1)].fx,
                                                                  locals()['color_intrin' + str(i + 1)].fy]

                    # 【空间过滤器】
                    locals()['spatial' + str(i + 1)] = rs.spatial_filter()
                    locals()['spatial' + str(i + 1)].set_option(rs.option.filter_magnitude, 5)
                    locals()['spatial' + str(i + 1)].set_option(rs.option.filter_smooth_alpha, 1)
                    locals()['spatial' + str(i + 1)].set_option(rs.option.filter_smooth_delta, 50)
                    locals()['spatial' + str(i + 1)].set_option(rs.option.holes_fill, 3)
                    locals()['filtered_depth' + str(i + 1)] = locals()['spatial' + str(i + 1)].process(
                        locals()['aligned_depth_frame' + str(i + 1)])

                    locals()['depth_image' + str(i + 1)] = np.asanyarray(
                        locals()['filtered_depth' + str(i + 1)].get_data())

                    locals()['color_image' + str(i + 1)] = np.asanyarray(
                        locals()['color_frame' + str(i + 1)].get_data())
                    # locals()['depth_image' + str(i + 1)] = np.asanyarray(
                    #     locals()['aligned_depth_frame' + str(i + 1)].get_data())

                    # 【打印深度值看看、全部打印显示】
                    # np.set_printoptions(threshold=np.inf)
                    # print(locals()['depth_image' + str(i + 1)])
                    # 【计算深度图数据中的0值】
                    [locals()['all_pixels' + str(i + 1)], locals()['num_black' + str(i + 1)]] = self.traversing_pixels(
                        locals()['depth_image' + str(i + 1)])
                    # num_black = 0
                    # all_pixels = 0
                    # for row in range(480):
                    #     for colume in range(640):
                    #         all_pixels += 1
                    #         if locals()['depth_image' + str(i + 1)][row, colume] == 0:
                    #             num_black += 1
                    print('depth_image分辨率:{}'.format(locals()['depth_image' + str(i + 1)].shape))
                    # print('depth_image:{}'.format(num_black))
                    # print('depth_image:{}'.format(num_black / all_pixels))
                    print('depth_image:{}'.format(locals()['num_black' + str(i + 1)]))
                    print('depth_image:{}'.format(
                        locals()['num_black' + str(i + 1)] / locals()['all_pixels' + str(i + 1)]))

                    # 以下这种卡的不行(get_distance()函数会把窗口搞崩溃(即使不很卡))
                    # for row in range(locals()['aligned_depth_frame' + str(i + 1)].get_height()):
                    #     for colume in range(locals()['aligned_depth_frame' + str(i + 1)].get_width()):
                    #         all_pixels += 1
                    #         if locals()['depth_image' + str(i + 1)][row, colume] == 0:
                    #             # if locals()[
                    #             #     'aligned_depth_frame' + str(i + 1)].get_distance(row, colume) == 0:
                    #             num_black += 1

                    # for pixel in locals()['depth_image' + str(i + 1)].ravel():
                    #     all_pixels += 1
                    #     if pixel == 0:
                    #         num_black += 1
                    # print('depth_image分辨率:{}'.format(locals()['depth_image' + str(i + 1)].shape))
                    # print('depth_image:{}'.format(num_black))
                    # print('depth_image:{}'.format(num_black / all_pixels))

                    locals()['depth_colormap' + str(i + 1)] = cv2.applyColorMap(
                        cv2.convertScaleAbs(locals()['depth_image' + str(i + 1)], alpha=0.0425),
                        cv2.COLORMAP_JET)

                    locals()['image' + str(i + 1)] = np.hstack(
                        (locals()['color_image' + str(i + 1)], locals()['depth_colormap' + str(i + 1)]))
                    cv2.imshow('win{}'.format(i + 1), locals()['image' + str(i + 1)])
                    cv2.waitKey(1)
                end_time = time.time()
                print('单帧运行时间:{}'.format(end_time - start_time))

        finally:
            for i in range(len(self.cam_serials)):
                locals()['pipeline' + str(i + 1)].stop()


if __name__ == '__main__':
    ObstacleDetection().obstacle_detection()

 

代码和数据私发来看看

给我康康你的循环怎么写的

题主要是得到解决了,我可以有偿学习一下,我这种运用场景蛮多的,目前我没找到快的

要是还没解决的话,可以把你的代码和数据私信一下,我看看能不能解决