这段代码的先决条件的细节很长,所以我会尽力总结.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)
数组大小匹配错误
有没有人知道一个有效的函数/方法,如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) 我想创建一个带有交互式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
我究竟做错了什么?谢谢
如果我正在制作一个基本的填充图,就像 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)
但我找不到任何透明度选项。
这是速度的问题。我正在尝试解决具有三种行为状态的扩散方程,其中:
瓶颈是扩散算子函数中的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 ×5
plot ×2
equality ×1
for-loop ×1
jupyter ×1
matplotlib ×1
numpy ×1
pandas ×1
performance ×1
pyqtgraph ×1
runge-kutta ×1