我想创建一个堆叠直方图.如果我有一个由三个等长数据集组成的二维数组,这很简单.代码和图片如下:
import numpy as np
from matplotlib import pyplot as plt
# create 3 data sets with 1,000 samples
mu, sigma = 200, 25
x = mu + sigma*np.random.randn(1000,3)
#Stack the data
plt.figure()
n, bins, patches = plt.hist(x, 30, stacked=True, normed = True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用具有不同长度的三个数据集的类似代码,则结果是一个直方图覆盖另一个直方图.有什么办法可以用混合长度数据集进行叠加直方图吗?
##Continued from above
###Now as three separate arrays
x1 = mu + sigma*np.random.randn(990,1)
x2 = mu + sigma*np.random.randn(980,1)
x3 = mu + sigma*np.random.randn(1000,1)
#Stack the data
plt.figure()
plt.hist(x1, bins, stacked=True, normed = True)
plt.hist(x2, bins, …
Run Code Online (Sandbox Code Playgroud) 我的问题是我想在某些情节中使用乳胶标题,而在其他情节则不使用乳胶.现在,matplotlib有两种不同的默认字体用于Latex标题和非Latex标题,我希望这两种字体保持一致.是否有RC设置我必须更改,这将自动允许?
我使用以下代码生成一个图:
import numpy as np
from matplotlib import pyplot as plt
tmpData = np.random.random( 300 )
##Create a plot with a tex title
ax = plt.subplot(211)
plt.plot(np.arange(300), tmpData)
plt.title(r'$W_y(\tau, j=3)$')
plt.setp(ax.get_xticklabels(), visible = False)
##Create another plot without a tex title
plt.subplot(212)
plt.plot(np.arange(300), tmpData )
plt.title(r'Some random numbers')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是我所说的不一致.轴刻度标签相对于标题看起来很薄:
如果我使用以下代码使用matplotlib创建绘图:
import numpy as np
from matplotlib import pyplot as plt
xx = np.arange(0,5, .5)
yy = np.random.random( len(xx) )
plt.plot(xx,yy)
plt.imshow()
Run Code Online (Sandbox Code Playgroud)
我得到一个看起来像附加图像的结果.问题是最底部的y-tick标签与最左边的x-tick标签重叠.这看起来不专业.我想知道是否有一种自动方式来删除最底部的y-tick标签,所以我没有重叠问题.代码行越少越好.
我想用matplotlib制作一个散点图.如果我想使用任何类型的标记,matplotlib的默认绘图行为会切断绘图左侧标记的左半部分,以及绘图右侧标记的右侧.我一直在寻找最自动的方式在绘图的左侧和右侧添加一些额外的空间,而不添加额外的刻度标签,所以我的标记没有被切断,它也看起来不像有x刻度标签不符合任何要点.
from matplotlib import pyplot as plt
import numpy as np
xx = np.arange(10)
yy = np.random.random( 10 )
plt.plot(xx, yy, 'o' )
Run Code Online (Sandbox Code Playgroud)
此代码生成如下图形:
我想在x = 0和x = 4.5时使用完整的圆圈,但我不想再使用刻度标签了,我希望尽可能简短且自动化.
我想尽可能高效地在C++程序中使用16位整数的二维数组执行绝对差值计算的可变块大小和.我对实时块匹配代码感兴趣.我想知道是否有可用的软件库?代码在Windows XP上运行,我使用Visual Studio 2010进行编译.CPU是2核AMD Athlon 64 x2 4850e.
通过可变块大小的绝对差值和(SAD)计算,我的意思如下.
我有一个较小的二维数组,我会称之为template_grid
,一个较大的二维数组,我将称之为image
.我想找到图像中的区域,该区域最小化模板中像素与图像中区域中像素之间的绝对差值之和.
在C++中计算SAD的最简单方法是:
for(int shiftY = 0; shiftY < rangeY; shiftY++) {
for(int shiftX = 0; shiftX < rangeX; shiftX++) {
for(int x = 0; x < lenTemplateX; x++) {
for(int y = 0; y < lenTemplateY; y++) {
SAD[shiftY][shiftX]=abs(template_grid[x][y] - image[y + shiftY][x + shiftX]);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
特定阵列大小的SAD计算已在英特尔性能原语库中进行了优化.但是,我正在使用的数组不符合这些库中的大小.
我有两个搜索范围,
范围很大:范围Y = 45,范围X = 10
小范围:rangeY = 4,rangeX = 2
只有一个模板大小,它是:lenTemplateY = …
我正在使用通过ctypes模块调用的共享库.我想将与此模块关联的stdout重定向到我可以在程序中访问的变量或文件.但是,ctypes使用sys.stdout中的单独stdout.
我将用libc演示我遇到的问题.如果有人复制并粘贴代码,他们可能需要更改第2行的文件名.
import ctypes
libc = ctypes.CDLL('libc.so.6')
from cStringIO import StringIO
import sys
oldStdOut = sys.stdout
sys.stdout = myStdOut = StringIO()
print 'This text gets captured by myStdOut'
libc.printf('This text fails to be captured by myStdOut\n')
sys.stdout = oldStdOut
myStdOut.getvalue()
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以捕获与ctypes加载的共享库相关联的标准输出?
我一直在使用openCV做一些块匹配,我注意到它的平方差异代码的总和与这样的直接for循环相比非常快:
int SSD = 0;
for(int i =0; i < arraySize; i++)
SSD += (array1[i] - array2[i] )*(array1[i] - array2[i]);
Run Code Online (Sandbox Code Playgroud)
如果我查看源代码以查看繁重发生的位置,OpenCV人员的for循环在循环的每次迭代中一次执行4个平方差计算.执行块匹配的功能如下所示.
int64
icvCmpBlocksL2_8u_C1( const uchar * vec1, const uchar * vec2, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
int v = vec1[i] - vec2[i];
int e = v * v;
v = vec1[i + 1] - vec2[i + 1];
e …
Run Code Online (Sandbox Code Playgroud)