小编Dan*_*cik的帖子

QCustomPlot - 在customPlot下面的QCPAxisRect上显示项目

在类似于QCustomPlot财务演示的项目中,我想将QCPItemRect不仅绘制到图表区域,还绘制到图表下方的区域.

QCPAxisRect *   xRect = new QCPAxisRect( this->ui.customPlot )
...
this->ui.customPlot->plotLayout()->addElement(1, 0, xRect);          
Run Code Online (Sandbox Code Playgroud)

我想添加QCPItemRect之类的

QCPItemRect *    xItem = new QCPItemRect( this->ui.customPlot );
                 xItem -> setPen   ( QPen ( Qt::black ));

                 xItem -> bottomRight ->setAxisRect( this->xRect );
                 xItem -> topLeft     ->setAxisRect( this->xRect );

                 xItem -> bottomRight ->setCoords(x - 2.0, y - 2.0);
                 xItem -> topLeft     ->setCoords(x + 2.0, y + 2.0);

                 this->ui.customPlot->addItem( xItem );
Run Code Online (Sandbox Code Playgroud)

然而,矩形仍然被绘制this->ui.customPlot而不是this->xRect.为什么?

Daniel,非常感谢任何帮助

更新 我自己找到了答案的一部分,缺少一行代码

xItem -> setClipAxisRect( xRect …
Run Code Online (Sandbox Code Playgroud)

c++ qt qcustomplot

12
推荐指数
1
解决办法
1230
查看次数

在C++中快速添加随机变量

简短版本:如何最有效地表示和添加由其实现列表给出的两个随机变量?

版本更长: 对于工作项目,我需要添加几个随机变量,每个变量都由一个值列表给出.例如,兰德的实现.变种.A是{1,2,3},B的实现是{5,6,7}.因此,我需要的是A + B的分布,即{1 + 5,1 + 6,1 + 7,2 + 5,2 + 6,2 + 7,3 + 5,3 + 6,3 + 7 }.对于不同的随机变量(C,D,...),我需要做几次这样的添加(让我们将这个数量的加法表示为COUNT,其中COUNT可能达到720).

问题是:如果我使用这种将A的每个实现与B的每个实现相加的愚蠢算法,则复杂度在COUNT中是指数的.因此,对于每个rv由三个值给出的情况,COUNT = 720的计算量是3 ^ 720~3.36xe ^ 343,这将持续到我们计算的日期结束:)更不用说在实际中生活中,每个rv的长度将是5000+.

解决方案: 1 /第一个解决方案是使用我可以进行舍入的事实,即具有整数实现值.像这样,我可以将每个rv表示为向量,并且在对应于实现的索引处,我具有值1(当rv具有此实现一次时).因此对于rv A和从0到10索引的实现向量,表示A的向量将是[0,1,1,1,0,0,0 ...]并且B的表示将是[0, 0,0,0,0,1,1,1,0,0,10.现在我通过遍历这些向量来创建A + B,并执行与上面相同的操作(将每个A的实现与B的每个实现相加并将其编码为相同的向量结构,向量长度中的二次复杂度).这种方法的好处是复杂性受到约束.这种方法的问题在于,在实际应用中,A的实现将在区间[-50000,

2 /为了拥有更短的数组,可以使用散列映射,这很可能会减少A + B中涉及的操作(数组访问)的数量,因为假设是理论跨度的一些非平凡部分[-50K, 50K]永远不会成为现实.然而,随着越来越多的随机变量的持续求和,实现的数量呈指数增长,而跨度仅线性增加,因此跨度中的数字密度随时间增加.这会破坏hashmap的好处.

所以问题是:我怎样才能有效地解决这个问题呢?计算电力交易中的VaR需要解决方案,其中所有分布都是凭经验给出的,并且不像普通分布,因此公式是没有用的,我们只能模拟.


使用数学被视为我们部门的一半的第一选择.是数学家.但是,我们要添加的分布表现不佳,COUNT = 720是极端的.更有可能的是,我们将使用COUNT = 24来获得每日VaR.考虑到要添加的分布的不良行为,对于COUNT = 24,中心极限定理不会过于紧密(SUM(A1,A2,...,A24)的发音不会接近正常).在我们计算可能的风险时,我们希望尽可能精确地得到一个数字.

预期用途是:您从某些操作中获得每小时的casflow.一小时的现金流量分配是rv A.对于下一个小时,它是rv B等等.你的问题是:99%的案件中最大的损失是多少?因此,您为这24小时中的每一小时模拟现金流量,并将这些现金流量作为随机变量添加,以便在一整天内获得总流量的分布.然后你取0.01分位数.

c++ random performance

10
推荐指数
1
解决办法
425
查看次数

性能问题C++ - 通过数组搜索

我有两个版本通过int数组搜索特定的值.

第一个版本是直接版本

int FindWithoutBlock(int * Arr, int ArrLen, int Val)
{
    for ( int i = 0; i < ArrLen; i++ )
        if ( Arr[i] == Val )
          return i;
 return ArrLen;
}
Run Code Online (Sandbox Code Playgroud)

第二个版本应该更快.传递的数组需要比前一种情况大一个元素.假设有5个值的数组,则分配6个整数然后执行以下操作

int FindWithBlock(int * Arr, int LastCellIndex, int Val)
{
    Arr[LastCellIndex]  = Val;

    int i;
    for ( i = 0 ; Arr[i] != Val; i++ );
    return i;
}
Run Code Online (Sandbox Code Playgroud)

这个版本应该更快 - 你不需要通过Arr每次迭代检查数组边界.

现在是"问题".在Debug中的100K元素阵列上运行这些函数100K次时,第二个版本大约快2倍.然而,在Release中,第一个版本的速度提高了大约6000倍.问题是为什么.

可以在http://eubie.sweb.cz/main.cpp找到演示此功能的程序

任何见解都非常感谢.丹尼尔

c++ performance

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

Visual Studio设计视图 - 表单为空白

我有一个带有两种形式的C#项目.所有编译都很好.当我运行项目时,所有表单都按预期绘制.

几天前,所有表单的DesignView 开始只显示一个空白表单,就像你在新的Windows.Forms项目中得到的表单一样.

我在SO上遇到了类似问题的几个问题,以下是对这些问题的评论:

  1. 我的项目没有第三方库(除了htmlAgilityPack,在其他Windows.Forms C#项目中不会导致此问题)
  2. 我已经检查过每个表单的InitializeComponent函数在项目中只有一次
  3. 当我创建一个新项目并添加一个现有表单(即我的一个有问题的项目表单)时,Design Viewer按预期工作 - 因此我怀疑我的表单的.cs,.Designer.cs和.resx文件是正常的.

在项目设置或其他地方有什么我可以搞砸的吗?

编辑

上面的第三点是误导性的 - 我也尝试为第二种形式创建一个新项目,并且问题仍然存在.显示问题的最少量源代码可在此处找到.

c# winforms visual-studio-2012

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

C++数组与C#ptr速度混淆

我正在为C#重写一个高性能的C++应用程序.C#应用程序明显慢于C++原始版本.分析告诉我C#app花费大部分时间来访问数组元素.因此我创建了一个简单的数组访问基准.我得到的结果与其他进行类似比较的结果完全不同.

C++代码:

#include <limits>
#include <stdio.h>
#include <chrono>
#include <iostream>

using namespace std;
using namespace std::chrono;

int main(void)
{
    high_resolution_clock::time_point t1 = high_resolution_clock::now();

    int xRepLen = 100 * 1000;
    int xRepCount = 1000;

    unsigned short * xArray = new unsigned short[xRepLen];
    for (int xIdx = 0; xIdx < xRepLen; xIdx++)
        xArray[xIdx] = xIdx % USHRT_MAX;

    int * xResults = new int[xRepLen];

    for (int xRepIdx = 0; xRepIdx < xRepCount; xRepIdx++)
    {

        // in each repetition, find the first …
Run Code Online (Sandbox Code Playgroud)

c# c++ arrays performance

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

VS 2013 Designer - "尝试加载格式不正确的程序"

在其他项目中,我的解决方案包含一个定义控件的项目和另一个在窗体上使用此控件的项目.当我尝试在VS Designer中打开此表单时,出现以下错误:

 Could not load file or assembly 'libX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format. 
Run Code Online (Sandbox Code Playgroud)

这里libX既不是与控制工程,也不与形式的项目.当我尝试构建解决方案时,一切都很顺利.当我运行显示表单的应用程序时,一切都很好.这是设计师似乎不喜欢的东西.

到目前为止我尝试过的事情:

  • 谷歌搜索了这个问题后,我经历了解决这个问题的常见尝试.也就是说,我的解决方案的配置在配置管理器中是正确的,并且项目不使用任何IIS(因此启用32b的解决方案不适用)
  • 我尝试在不同版本的VS 2013(12.0.21005.1 REL)上打开表单,并且没有任何问题.
  • 我正在使用VS 2013 Update 5.由于有时候Designed的工作正常,我尝试降级到Update 2 - 没有帮助.
  • 我试着修复我的VS--没有帮助.

编辑:这里 可以找到一个演示问题的最小项目.有问题的表格可以在+lib.trading\lib.trading.obj.forms.strategyParametersForm项目中找到.

在VS Designer中打开表单时出现的错误如下: 在此输入图像描述

Daniel,非常感谢任何帮助

c# visual-studio

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

SSE累计求和

我有一个简单的问题.具有起始uint_32值(比如125)和要添加的__m128i操作数,例如(+ 5,+ 10,-1,-5).我希望尽可能快地得到一个向量(125 + 5,125 + 5 + 10,125 + 5 + 10 - 1,125 + 5 + 10 - 1 - 5),即从操作数中累加值到起始值.到目前为止,我能想到的唯一解决方案是添加4个__m128i变量.例如,他们会

/* pseudoSSE code... */
__m128i src =     (125,125,125,125)
__m128i operands =(5,10,-1,-5)

/*  Here I omit the partitioning of operands into add1,..add4 for brevity  */

__m128i add1 =    (+05,+05,+05,+05)
__m128i add2 =    (+00,+10,+10,+10)
__m128i add3 =    (+00,+00,-01,-01)
__m128i add4 =    (+00,+00,+00,-05)
__m128i res1 = _mm_add_epu32( add1, add2 )
__m128i res2 = _mm_add_epu32( add3, add4 )
__m128i res3 = …
Run Code Online (Sandbox Code Playgroud)

c++ performance sse

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

C++ 中的快速百分位

我的程序计算风险价值指标的蒙特卡罗模拟。为了尽可能简化,我有:

1/ simulated daily cashflows
2/ to get a sample of a possible 1-year cashflow, 
   I need to draw 365 random daily cashflows and sum them
Run Code Online (Sandbox Code Playgroud)

因此,每日现金流量是一个经验给定的分配函数,要采样 365 次。为此,我

 1/ sort the daily cashflows into an array called *this->distro*
 2/ calculate 365 percentiles corresponding to random probabilities
Run Code Online (Sandbox Code Playgroud)

我需要对年度现金流进行模拟,例如 10K 次,才能获得大量模拟年度现金流。准备好每日现金流量的分布函数,我进行抽样,例如...

for ( unsigned int idxSim = 0; idxSim < _g.xSimulationCount; idxSim++ )
{
    generatedVal = 0.0;
    for ( register unsigned int idxDay = 0; idxDay < 365; idxDay ++ ) …
Run Code Online (Sandbox Code Playgroud)

c++ performance percentile

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