相关疑难解决方法(0)

在numpy中使用as_strided函数滑动窗口?

当我使用python实现一个滑动窗口来检测静止图像中的对象时,我开始了解这个很好的函数:

numpy.lib.stride_tricks.as_strided
Run Code Online (Sandbox Code Playgroud)

因此,我尝试实现一般规则,以避免在改变我需要的滑动窗口大小时可能失败的错误.最后我得到了这个代表:

all_windows = as_strided(x,((x.shape[0] - xsize)/xstep ,(x.shape[1] - ysize)/ystep ,xsize,ysize), (x.strides[0]*xstep,x.strides[1]*ystep,x.strides[0],x.strides[1])
Run Code Online (Sandbox Code Playgroud)

这导致4 dim矩阵.前两个表示图像的x和y轴上的窗口数.其他代表窗口的大小(xsize,ysize)

并且step表示两个连续窗口之间的位移.

如果我选择方形滑动窗口,这种表示可以正常工作.但我仍然有一个问题,让这个工作为ex(128,64)的窗口,我通常得到图像不相关的数据.

我的代码出了什么问题.有任何想法吗?如果有一个更好的方法来获得一个漂亮和整洁的python图像处理滑动窗口?

谢谢

numpy image-processing scipy computer-vision

6
推荐指数
1
解决办法
1万
查看次数

如何检查一个二维NumPy数组是否包含特定的值模式?

我有一个大NumPy.array field_array而小的数组match_array,都由int值组成.使用以下示例,如何检查match_array形状的任何段是否field_array包含与其中的值完全对应的值match_array

import numpy
raw_field = ( 24,  25,  26,  27,  28,  29,  30,  31,  23, \
              33,  34,  35,  36,  37,  38,  39,  40,  32, \
             -39, -38, -37, -36, -35, -34, -33, -32, -40, \
             -30, -29, -28, -27, -26, -25, -24, -23, -31, \
             -21, -20, -19, -18, -17, -16, -15, -14, -22, \
             -12, -11, -10,  -9,  -8,  -7,  -6,  -5, -13, \
              -3,  -2,  -1, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy pattern-matching

6
推荐指数
1
解决办法
2813
查看次数

对numpy数组进行快速迭代以获得平方残差

我喜欢使用许多已知信号形状的最小二乘匹配数据(一个numpy数组的浮点数).我的代码有效,但对于我打算做的很多次运行来说太慢了:

import numpy
import time

samples = 50000
width_signal = 100
data = numpy.random.normal(0, 1, samples)
signal = numpy.random.normal(0, 1, width_signal)  # Placeholder

t0 = time.clock()
for i in range(samples - width_signal):
    data_chunk = data[i:i + width_signal]
    residuals = data_chunk - signal
    squared_residuals = residuals**2
    summed_residuals = numpy.sum(squared_residuals)
t1 = time.clock()
print('Time elapsed (sec)', t1-t0)
Run Code Online (Sandbox Code Playgroud)

编辑:纠正了一个错误:第一个方形残差,然后将它们相加.

在我的机器上运行大约需要0.2秒.由于我有许多数据集和信号形状,这太慢了.我的具体问题不允许使用典型的MCMC方法,因为信号形状太不同了.它必须是蛮力.

典型的数据量为50,000浮点数据和100个信号浮点数.这些可以变化几个因素.

我的测试表明:

  • 数据的总和占numpy.sum(residuals)90%的时间.我尝试过Python sum(residuals),对于小型阵列(〜<50个元素)来说速度更快,对于更大的阵列来说速度更慢.我应该插入一个if条件吗?
  • 我尝试过numpy.roll()而不是直接获取数据,而且.roll()速度较慢.

问题:

  • 加速是否有合理的改进?
  • 是否有更快的方法来汇总数组?我不知道C,但如果它快得多,我可以试试.
  • GPU能帮忙吗?我有很多事要做.如果是这样,我在哪里可以找到执行此操作的代码段?

python arrays performance numpy

3
推荐指数
1
解决办法
192
查看次数