python加快for循环的速度_提⾼通过numpy数组循环的速度-
python
在对地⾯进⾏分类之后,我尝试分割LiDAR点云。我正在使⽤numpy创建点云(pc)的“图像”,并遍历numpy数组。我想加快循环速度,或者⼀起避免循环。我将使⽤图像分割技术,但是⾸先我需要运⾏此代码来创建“图像”,这是需要⼀段时间的部分。有没有办法提⾼这个循环的速度或避免这种循环?
import numpy as np
from math import ceil, floor
'''In this case:
pc = point cloud (X,Y,Z values)'''
# point cloud is in the numpy array, pc
minx,maxx,miny,maxy = floor(np.min(pc[:,0]-1)),ceil(np.max(pc[:,0]+1)),floor(np.min(pc[:,1]-1)),ceil(np.max(pc[:,1]+1))# x,y bounding box
# grid x and y direction (resolution: 0.2 meters)
gridx = np.linspace(minx,maxx,int((maxx - minx+0.2)*5),endpoint=True)
gridy = np.linspace(miny,maxy,int((maxy - miny +0.2)*5),endpoint=True)
#shape of the new image with 0.2 meter resolution.
imgx,imgy = int((maxx-minx+0.2)*5),int((maxy - miny +0.2)*5)
# this is what will be created at the end. It will be a binary image.
img = np.zeros((imgx,imgy))
#loop through array to generate image (this is the part that takes a while)
for x,i in enumerate(gridx):
for y,j in enumerate(gridy):
# Test if there any points in this "grid"
input_point = pc[np.where(((pc[:,0]>i) & (pc[:,0]j) & (pc[:,1]
# if there are points, give pixel value 1.
if input_point.shape[0]!=0:
img[x,y]=1
print('Image made')
谢谢。
python参考⽅案
这是⼀个⽮量化版本,可在随机测试集上产⽣相同的输出:
import numpy as np
from math import ceil, floor
import time
width = 0.2
t = [time.time()]
pc = np.random.uniform(-10, 10, (100, 3))
# point cloud is in the numpy array, pc
minx,maxx,miny,maxy = floor(np.min(pc[:,0]-1)),ceil(np.max(pc[:,0]+1)),floor(np.min(pc[:,1]-1)),ceil(np.max(pc[:,1]+1))# x,y bounding box
# grid x and y direction (resolution: 0.2 meters)
gridx = np.linspace(minx,maxx,int((maxx - minx+0.2)*5),endpoint=True)
gridy = np.linspace(miny,maxy,int((maxy - miny +0.2)*5),endpoint=True)
#shape of the new image with 0.2 meter resolution.
imgx,imgy = int((maxx-minx+0.2)*5),int((maxy - miny +0.2)*5)
print('Shared ops done')
t.append(time.time())
# this is what will be created at the end. It will be a binary image.
img = np.zeros((imgx,imgy))
#loop through array to generate image (this is the part that takes a while)
for x,i in enumerate(gridx):
for y,j in enumerate(gridy):
# Test if there any points in this "grid"
input_point = pc[np.where(((pc[:,0]>i) & (pc[:,0]j) & (pc[:,1]
# if there are points, give pixel value 1.
if input_point.shape[0]!=0:
img[x,y]=1
t.append(time.time())
print('Image made')
if width == 0.2:
img2 = np.zeros((imgx, imgy), 'u1')
x2, y2 = (((pc[:, :2] - (minx, miny)) * (5, 5))).astype(int).T
img2[x2, y2] = 1
elif width == 1:
img2 = np.zeros((imgx+4, imgy+4), 'u1')
x2, y2 = (((pc[:, :2] - (minx, miny)) * (5, 5))).astype(int).T
np.lib.stride_tricks.as_strided(img2, (imgx, imgy, 5, 5), 2 * img2.strides)[x2, y2] = 1
img2 = img2[4:, 4:]
t.append(time.time())
print('Image remade')
print('took', np.diff(t), 'secs respectively')
assert((img2==img).all())
print('results equal')
您的代码产⽣5x5像素。那是故意的吗?要重现这⼀点,我必须有点棘⼿。
更新:添加了⼀个使普通像素代替的版本。
样品运⾏:
Shared ops done
Image made
Image remade
took [2.29120255e-04 1.54510736e-01 1.44481659e-04] secs respectively
results equal
Python pytz时区函数返回的时区为9分钟 - python
由于某些原因,我⽆法从以下代码中出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:
我在Windows上使⽤Python 3和sqlite3。我正在开发⼀个使⽤数据库存储联系⼈的⼩型应⽤程序。我注意到,如果应⽤程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应⽤程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…⽤⼤写字母拆分字符串,但忽略AAA Python Regex - python
我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以⼤写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…Python:同时在for循环中添加到列表列表 - python
我想⽤for循环外的0索引值创建⼀个新列表,然后使⽤for循环添加到相同的列表。我的玩具⽰例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…查字符串中的⾏数 - pythonlinspace函数python
我正在创建⼀个python电影播放器/制作器,我想在多⾏字符串中到⾏数。我想知道是否有任何内置函数或可以编写代码的函数来做到这⼀点:x = """ line1 line2 """ getLines(x) python⼤神给出的解决⽅案 如果换⾏符是'\n',则nlines …
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论