小编WBM*_*WBM的帖子

当迭代次数高达40,000时,在图像分析中加速"for-loop"

这段代码的先决条件的细节很长,所以我会尽力总结.WB/RG/BYColor是基本图像,FIDO是应用于此基本图像的叠加.S_wb/rg/by是最终输出图像.WB/RG/BYColor与FIDO的大小相同.

对于FIDO中的每个唯一元素,我们希望计算基础图像中该区域的平均颜色.下面的代码执行此操作,但由于numFIDO非常大(最多40,000),这需要很长时间.

计算三个独立RGB通道的平均值.

sX=200
sY=200
S_wb = np.zeros((sX, sY))
S_rg = np.zeros((sX, sY))
S_by = np.zeros((sX, sY))
uniqueFIDOs, unique_counts = np.unique(FIDO, return_counts=True) 
numFIDOs = uniqueFIDOs.shape  
for i in np.arange(0,numFIDOs[0]):
    Lookup = FIDO==uniqueFIDOs[i]
    # Get average of color signals for this FIDO
    S_wb[Lookup] = np.sum(WBColor[Lookup])/unique_counts[i]
    S_rg[Lookup] = np.sum(RGColor[Lookup])/unique_counts[i]
    S_by[Lookup] = np.sum(BYColor[Lookup])/unique_counts[i]
Run Code Online (Sandbox Code Playgroud)

运行大约需要7.89秒,不会这么长,但这将包含在另一个循环中,所以它会累积起来!

我尝试过矢量化(如下所示),但我无法做到

FIDOsize = unique_counts[0:numFIDOs[0]:1]
Lookup = FIDO ==uniqueFIDOs[0:numFIDOs[0]:1]
S_wb[Lookup] = np.sum(WBColor[Lookup])/FIDOsize
S_rg[Lookup] = np.sum(RGColor[Lookup])/FIDOsize
S_by[Lookup] = np.sum(BYColor[Lookup])/FIDOsize
Run Code Online (Sandbox Code Playgroud)

数组大小匹配错误

python performance for-loop numpy equality

11
推荐指数
2
解决办法
482
查看次数

熊猫的滚动差异

有没有人知道一个有效的函数/方法,如pandas.rolling_mean计算数组的滚动差异

这是我最接近的解决方案:

roll_diff = pd.Series(values).diff(periods=1)
Run Code Online (Sandbox Code Playgroud)

但是,它只计算单步滚动差异.理想情况下,步长是可编辑的(即当前时间步长和最后步骤之间的差异).

我也写过这个,但是对于更大的数组,它很慢:

def roll_diff(values,step):
    diff = []
    for i in np.arange(step, len(values)-1):
        pers_window = np.arange(i-1,i-step-1,-1)
        diff.append(np.abs(values[i] - np.mean(values[pers_window])))
    diff = np.pad(diff, (0, step+1), 'constant')
    return diff
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
7292
查看次数

jupyter"%matplotlib notebook"没有显示情节

我想创建一个带有交互式matplotlib图的笔记本.我可以显示静态图(%matplotlib inline工作正常),但%matplotlib notebook没有图形显示,不在笔记本内,也不作为弹出窗口.

conda安装了ipython 5.1.0,jupyter 4.0.6 matplotlib 2.0('2.0.0b4 + 2344.g7b27a1b')

这是笔记本电脑https://github.com/fedhere/notebookTests/blob/master/mplnotebook_test.ipynb

我究竟做错了什么?谢谢

python plot matplotlib jupyter

5
推荐指数
1
解决办法
1696
查看次数

pyqtgraph中填充图的透明度

如果我正在制作一个基本的填充图,就像 pyqtgraph 的示例一样。如何编辑填充区域的透明度?

import pyqtgraph as pg
win = pg.GraphicsWindow(title="Basic plotting examples")
p7 = win.addPlot(title="Filled plot, axis disabled")
y = np.sin(np.linspace(0, 10, 1000)) + np.random.normal(size=1000, scale=0.1)
p7.plot(y, fillLevel=-0.3, brush=(50,50,200,100))
Run Code Online (Sandbox Code Playgroud)

您可以使用 mkBrush 制作自定义画笔:

br = pg.mkBrush(color='r')
Run Code Online (Sandbox Code Playgroud)

但我找不到任何透明度选项。

python plot pyqtgraph

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

四阶 Runga Kutta 方法 - 扩散方程 - 图像分析

这是速度的问题。我正在尝试解决具有三种行为状态的扩散方程,其中:

  • Lambda == 0 平衡
  • Lambda > 0 最大扩散
  • Lambda < 0 分钟扩散

瓶颈是扩散算子函数中的else语句

平衡态有一个简单的 T 算子和扩散算子。对于其他两个州来说,情况变得相当复杂。到目前为止,我还没有耐心看完代码运行时间。据我所知方程是正确的,平衡状态的输出似乎是正确的,也许有人有一些提高非平衡状态速度的技巧?

(我想欧拉解决方案(FTCS)而不是 Runge-Kutta 会更快。还没有尝试过。)

您可以导入任何黑白图像来试用代码。

import numpy as np
import sympy as sp
import scipy.ndimage.filters as flt
from PIL import Image

# import image
im = Image.open("/home/will/Downloads/zebra.png")
arr = np.array(im)
arr=arr/253.

def T(lamda,x): 
    """
    T Operator
    lambda is a "steering" constant between 3 behavior states
    -----------------------------
    0     -> linearity 
    +inf  -> max
    -inf  -> min
    -----------------------------
    """    
    if lamda == 0:  # linearity
        return …
Run Code Online (Sandbox Code Playgroud)

python image-processing runge-kutta

2
推荐指数
1
解决办法
482
查看次数