问:如何加快速度?
下面是我对Matlab的im2col '滑动'的实现,以及返回每个第n列的附加功能.该函数采用图像(或任意2个暗淡的数组)并从左到右,从上到下滑动,拾取给定大小的每个重叠子图像,并返回其列为子图像的数组.
import numpy as np
def im2col_sliding(image, block_size, skip=1):
rows, cols = image.shape
horz_blocks = cols - block_size[1] + 1
vert_blocks = rows - block_size[0] + 1
output_vectors = np.zeros((block_size[0] * block_size[1], horz_blocks * vert_blocks))
itr = 0
for v_b in xrange(vert_blocks):
for h_b in xrange(horz_blocks):
output_vectors[:, itr] = image[v_b: v_b + block_size[0], h_b: h_b + block_size[1]].ravel()
itr += 1
return output_vectors[:, ::skip]
Run Code Online (Sandbox Code Playgroud)
例:
a = np.arange(16).reshape(4, 4)
print a
print im2col_sliding(a, (2, 2)) # return every …Run Code Online (Sandbox Code Playgroud) 我通过API访问一些数据,我需要为我的请求提供日期范围,例如.start ='20100101',end ='20150415'.我想我会通过将日期范围分解为非重叠间隔并在每个间隔上使用多处理来加快速度.
我的问题是我如何分解日期范围并不能始终如一地给我预期的结果.这是我做的:
from datetime import date
begin = '20100101'
end = '20101231'
Run Code Online (Sandbox Code Playgroud)
假设我们想把它分解成几个季度.首先,我将字符串更改为日期:
def get_yyyy_mm_dd(yyyymmdd):
# given string 'yyyymmdd' return (yyyy, mm, dd)
year = yyyymmdd[0:4]
month = yyyymmdd[4:6]
day = yyyymmdd[6:]
return int(year), int(month), int(day)
y1, m1, d1 = get_yyyy_mm_dd(begin)
d1 = date(y1, m1, d1)
y2, m2, d2 = get_yyyy_mm_dd(end)
d2 = date(y2, m2, d2)
Run Code Online (Sandbox Code Playgroud)
然后将此范围划分为子间隔:
def remove_tack(dates_list):
# given a list of dates in form YYYY-MM-DD return a list of strings in form 'YYYYMMDD'
tackless = …Run Code Online (Sandbox Code Playgroud) 我编写这段代码的前提是识别图像中的单词.此方法查找链接中显示的一些但不是所有单词.
我的代码是:
def methods_text_recognition_and_delete(self, path_floorplans, f, path_fw):
image = cv2.imread(path_floorplans +f)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # grayscale
_, thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV) # threshold
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
dilated = cv2.dilate(thresh, kernel, iterations = 1) # dilate
contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # get contours
# for each contour found, draw a rectangle around it on original image
for contour in contours:
# get rectangle bounding contour
[x, y, w, h] = cv2.boundingRect(contour)
# discard areas …Run Code Online (Sandbox Code Playgroud) 这个问题从寻找提供的答案源于此有关的问题计数的数量过零点.提供了几个解决问题的答案,但NumPy appproach在时间上摧毁了其他人.
当我比较四个答案时,我注意到NumPy解决方案为大序列提供了不同的结果.有问题的四个答案是循环和简单生成器,更好的生成器表达式和NumPy解决方案.
问题:为什么NumPy解决方案提供的结果与其他三种解决方案不同?(哪个是正确的?)
以下是计算过零次数的结果:
Blazing fast NumPy solution
total time: 0.303605794907 sec
Zero Crossings Small: 8
Zero Crossings Med: 54464
Zero Crossings Big: 5449071
Loop solution
total time: 15.6818780899 sec
Zero Crossings Small: 8
Zero Crossings Med: 44960
Zero Crossings Big: 4496847
Simple generator expression solution
total time: 16.3374049664 sec
Zero Crossings Small: 8
Zero Crossings Med: 44960
Zero Crossings Big: 4496847
Modified generator expression …Run Code Online (Sandbox Code Playgroud) 在 ipython notebook 中,我调用从我自己的模块导入的函数并运行一些代码。我注意到,如果我更改函数中的代码(笔记本外部)并执行笔记本,则旧版本的函数会运行。
当我记得时,ipython notebook 或 firefox 似乎正在缓存我可以用 ctrl-F5 清除的模块。是否有 ipython notebook 函数调用来确保我运行的是最新代码?
我一直在寻找一个 python 实现,给定一个数组,它返回 4 或 8 连接的邻接矩阵。我感到惊讶的是 cv2 或 networkx 不包含此功能。我遇到了这个很棒的 Matlab实现,并决定用 python 做一些类似的东西。
问题:我正在寻找一种可以改进运行时/空间中链接的 Matlab 解决方案或其他有趣方法的实现。
免责声明:
我在这里提交我自己的实现,因为我认为我不可能是唯一需要为图像处理或其他应用程序创建(4 / 8 连接)邻接矩阵的人。我希望能够提供改进或更好的实施。