小编Tim*_*Tim的帖子

将性能从size_t转换为double

TL; DR:为什么乘法/转换数据的size_t速度很慢,为什么每个平台会有所不同?

我遇到了一些我不太了解的性能问题.上下文是相机帧抓取器,其中读取128x128 uint16_t图像并以几百Hz的速率进行后处理.

在后处理中,我生成一个直方图frame->histo,该直方图uint32_t具有thismaxval= 2 ^ 16个元素,基本上我统计了所有强度值.使用这个直方图,我计算总和和平方和:

double sum=0, sumsquared=0;
size_t thismaxval = 1 << 16;

for(size_t i = 0; i < thismaxval; i++) {
    sum += (double)i * frame->histo[i];
    sumsquared += (double)(i * i) * frame->histo[i];
}
Run Code Online (Sandbox Code Playgroud)

使用配置文件分析代码我得到以下(样本,百分比,代码):

 58228 32.1263 :  sum += (double)i * frame->histo[i];
116760 64.4204 :  sumsquared += (double)(i * i) * frame->histo[i];
Run Code Online (Sandbox Code Playgroud)

或者,第一行占用CPU时间的32%,第二行占64%.

我做了一些基准测试,似乎是数据类型/转换有问题.当我将代码更改为

uint_fast64_t isum=0, isumsquared=0;

for(uint_fast32_t i = 0; i < thismaxval; i++) …
Run Code Online (Sandbox Code Playgroud)

c performance casting

28
推荐指数
1
解决办法
5533
查看次数

PNG到eps转换文件大小大幅增加

我正在将图像从.png转换为.eps,这极大地增加了文件大小.任何人都可以解释为什么会这样,以及如何防止它增加这么多.

我正在使用Unix 转换:convert image.png image.eps

谢谢你的帮助

png image eps

22
推荐指数
3
解决办法
4万
查看次数

Matplotlib y 轴限制在设置 x 轴限制后没有更新?

我正在尝试绘制某些数据的子集,但在设置 x 轴限制后,y 轴限制未正确更新。有没有办法在设置 x 轴限制后让 matplotlib 更新 y 轴限制?

例如,考虑下图:

import numpy
import pylab
pylab.plot(numpy.arange(100)**2.0)
Run Code Online (Sandbox Code Playgroud)

这使: 图 1 全范围

这工作正常。但是,如果我只想查看从 x=0 到 x=10 的部分,y 缩放就搞砸了:

pylab.plot(numpy.arange(100)**2.0)
pylab.xlim(0,10)
Run Code Online (Sandbox Code Playgroud)

这使: 绘制 1 个子集.

在前一种情况下,x 轴和 y 轴已正确缩放,在后一种情况下,即使未绘制数据,y 轴仍然缩放相同。我如何告诉 matplotlib 更新 y 轴缩放?

明显的解决方法是绘制数据本身的子集,或者通过检查数据手动重置 y 轴限制,但这些都相当麻烦。

更新:

上面的例子是简化的,在更一般的情况下,有:

pylab.plot(xdata, ydata1)
pylab.plot(xdata, ydata2)
pylab.plot(xdata, ydata3)
pylab.xlim(xmin, xmax)
Run Code Online (Sandbox Code Playgroud)

手动设置 y 轴范围当然是可能的

subidx = N.argwhere((xdata >= xmin) & (xdata <= xmax))
ymin = N.min(ydata1[subidx], ydata2[subidx], ydata3[subidx])
ymax = N.max(ydata1[subidx], ydata2[subidx], ydata3[subidx])
pylab.xlim(xmin, xmax)
Run Code Online (Sandbox Code Playgroud)

但这至少可以说很麻烦(恕我直言)。有没有更快的方法来做到这一点而无需手动计算绘图范围?谢谢!

更新 2:

函数autoscale做了一些缩放,似乎是这项工作的合适人选,但独立处理轴并且只 …

plot matplotlib python-2.7

8
推荐指数
1
解决办法
5700
查看次数

检查是否使用Numpy数组定义变量?

有时候,我不得不在这里我想测试一个变量是否是一个情况0还是None与否.在纯Python中,这很简单

foo == True
Run Code Online (Sandbox Code Playgroud)

但是当foo可能是Numpy对象(例如numpy.ndarray)时,这不再起作用了,我得到错误:

ValueError: The truth value of an array with more than one element is ambiguous. 
 Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

在这种情况下我想要a.any(),但是这在非可迭代对象上失败了.

当然,我可以明确地检查,如果foo0None,但我想知道如果有一个更优雅的方式来做到这一点.

如何检查是否有任意对象(可迭代和不可迭代)True

python numpy

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

制作每日重置的InfluxDB/Grafana累积函数(锯齿图)

我将能源使用数据记录为计数器,我希望将其显示为每天重置的累积图表,正如此处提出的类似要求。

我可以按如下方式生成累积值:

SELECT mean("value") \
  FROM "energy" \
  WHERE $timeFilter \
  GROUP BY time($__interval)
Run Code Online (Sandbox Code Playgroud)

以及每日价值:

SELECT max("value") \
  FROM "energy" \
  WHERE $timeFilter \
  GROUP BY time(1d)
Run Code Online (Sandbox Code Playgroud)

但我无法减去它或在一个查询中得到它,因为 GROUP BY 时间不同。

(如何)这在 influxdb 中可能吗?我看过 INTEGRATE() 但这还没有找到一种方法来使其工作。

数据如下所示(示例仅限 1 天):

time                 value
----                 ----
2018-12-10T17:00:00Z 7
2018-12-10T18:00:00Z 9
2018-12-10T19:00:00Z 10
2018-12-10T20:00:00Z 11
2018-12-10T21:00:00Z 13
2018-12-10T22:00:00Z 14
2018-12-10T23:00:00Z 15
2018-12-11T00:00:00Z 16
2018-12-11T01:00:00Z 17
2018-12-11T02:00:00Z 20
2018-12-11T03:00:00Z 24
2018-12-11T04:00:00Z 25
2018-12-11T05:00:00Z 26
2018-12-11T06:00:00Z 27
2018-12-11T07:00:00Z 28
2018-12-11T08:00:00Z 29
2018-12-11T09:00:00Z 31
2018-12-11T10:00:00Z …
Run Code Online (Sandbox Code Playgroud)

influxdb grafana

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

MATLAB MEX找不到带有XCode 4.3(Mac)的标准库

我开始在我的Mac上运行从C代码(使用XCode 4.3)编译的MATLAB(R2012a)的MEX文件(运行OSX 10.7.3,Lion).我已经安装了MATLAB提供的XCode补丁,该补丁配置MATLAB以在XCode 4.2+下使用新的llvm-gcc编译器,但是我仍然在尝试使用以下命令编译示例文件时出现以下错误mex timestwo.c:

/Applications/MATLAB_R2012a.app/extern/include/matrix.h:852:20: error: stdlib.h: No such file or directory
In file included from timestwo.c:1:
/Applications/MATLAB_R2012a.app/extern/include/mex.h:161:19: error: stdio.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

编译然后打破

mex: compile of ' "timestwo.c"' failed.

Error using mex (line 206)
Unable to complete successfully.
Run Code Online (Sandbox Code Playgroud)

显然,编译器找不到标准库头文件目录,但是需要更改才能成功编译?

matlab xcode mex xcode4.3

5
推荐指数
2
解决办法
8483
查看次数

Python:Klein Bottle的3D图

所以我正在学习python,而我目前正在制作3D情节.为了让事情变得有趣,我想制作一个Klein Bottle的情节,但不知何故它根本不起作用.我尝试了表面的两个参数化(一个在Wolfram上,一个在一个随机网站上)都给出了一个圆环形状.

所以我想知道我的代码是否错了.任何人都可以看看并告诉我,如果我做得对(如果你碰巧知道Klein瓶的参数化,那么这也是受欢迎的:P)

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

def surf(u, v):
    X = (3+(1+np.sin(v)) + 2*(1 - np.cos(v)/2)*np.cos(u))*np.cos(v)
    Y = (4+2*(1 - np.cos(v)/2) * np.cos(u))*np.sin(v)
    Z = -2*(1-np.cos(v)/2)*np.sin(u)
    return X,Y,Z
ux, vx =  np.meshgrid(np.linspace(0, 2*np.pi, 20),
                      np.linspace(0, 2*np.pi, 20))
x,y,z = surf(ux, vx)

fig = plt.figure()
ax = fig.gca(projection="3d")

plot = ax.plot_surface(x,y,z, rstride=1, cstride=1, cmap=cm.jet,
                       linewidth=0, antialiased=False)

plt.show()
Run Code Online (Sandbox Code Playgroud)

python math 3d plot

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

标签 统计

plot ×2

python ×2

3d ×1

c ×1

casting ×1

eps ×1

grafana ×1

image ×1

influxdb ×1

math ×1

matlab ×1

matplotlib ×1

mex ×1

numpy ×1

performance ×1

png ×1

python-2.7 ×1

xcode ×1

xcode4.3 ×1