小编Sun*_*ner的帖子

Haskell中`data`和`newtype`之间的区别

我写这个有什么区别?

data Book = Book Int Int
Run Code Online (Sandbox Code Playgroud)

newtype Book = Book (Int, Int) -- "Book Int Int" is syntactically invalid
Run Code Online (Sandbox Code Playgroud)

haskell types type-systems newtype

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

什么时候需要在C++中使用decltype

我正在学习C++,并在C++入门中找到了以下代码:

int main() {

string s("some string");
for(decltype(s.size()) index = 0; index != s.size() && !isspace(s[index]); ++index)
    s[index] = toupper(s[index]);

cout << s;
Run Code Online (Sandbox Code Playgroud)

}

我理解代码大写字符串中的第一个单词,输出是

SOME string
Run Code Online (Sandbox Code Playgroud)

我很好奇的是,为什么你需要使用decltype(s.size())声明索引的类型.如果我将其更改为int index =0,代码仍然编译并运行没有问题.我似乎更容易使用int.我想我在这里缺少一些导入概念,任何反馈都会非常有用.谢谢!

c++

7
推荐指数
1
解决办法
527
查看次数

Python混淆 - 约定,名称和值

我是初学者,在学习python时会感到困惑.如果我有以下python代码:

import numpy as np
X = np.array([1,0,0])
Y = X
X[0] = 2
print Y
Run Code Online (Sandbox Code Playgroud)

Y将被证明是 array([2, 0, 0])

但是,如果我执行以下操作:

import numpy as np
X = np.array([1,0,0])
Y = X
X = 2*X
print Y
Run Code Online (Sandbox Code Playgroud)

Y 还是 array([1,0,0])

到底是怎么回事?

python

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

C++矩阵计算效率

我们正在尝试优化我们的C++代码,并且我们有以下矩阵计算(使用Eigen库)

#include<Eigen/Dense>

int main(){

   MatrixXd P = MatrixXd::Random(30,30); // a  random double 30 x 30 matrix P
   MatrixXd M = MatrixXd::Random(30,30); // a  random double 30 x 30 matrix M
   Matrix<double, 30, 30> I; 
   I.setIdentity(); // I is an 30 x 30 identity matirx

   P = (I-M)*P

   return 0;

   }
Run Code Online (Sandbox Code Playgroud)

它们都是nxn矩阵,而我是单位矩阵.我们发现重写了上面的矩阵计算

   P= (I- M)*P
Run Code Online (Sandbox Code Playgroud)

   P = P-M*P
Run Code Online (Sandbox Code Playgroud)

使用gcc 6.2编译器在Linux ubuntu系统中加速~4-8倍.我意识到这样一个事实:编译器可能对身份矩阵和事实I*P = P一无所知,但仍无法解决使效率提高如此之多的问题.有谁知道可能的原因做出如此重大的改进?

c++ algorithm performance matrix eigen

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

具有多个断点的可拖动线

我有一个与以下问题非常相似的应用程序:画半条无限线?

我想有多个阈值的无限线。

在此处输入图片说明

问题中提供的解决方案是一个很好的起点:https : //stackoverflow.com/a/37836348/7163293

我试图通过在中修改movable属性__init__并添加一个setMovable方法来使线可移动,就像在source中的源代码一样:

http://www.pyqtgraph.org/documentation/_modules/pyqtgraph/graphicsItems/InfiniteLine.html#InfiniteLine

from pyqtgraph.Qt import QtGui
import numpy as np
import pyqtgraph as pg

class InfiniteLineWithBreak(pg.GraphicsObject):

    def __init__(self, changeX, levelsY, pen=None):
        pg.GraphicsObject.__init__(self)

        self.changeX = changeX
        self.levelsY = levelsY

        self.maxRange = [None, None]
        self.moving = False
        self.movable = True
        self.setMovable(self.movable)
        self.mouseHovering = False

        pen = (200, 200, 100)
        self.setPen(pen)
        self.setHoverPen(color=(255,0,0), width=self.pen.width())
        self.currentPen = self.pen

    def setMovable(self, m):
        """Set whether the line is movable by the user."""
        self.movable = …
Run Code Online (Sandbox Code Playgroud)

python drag-and-drop pyqt pyqt4 pyqtgraph

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

Python numpy unwrap函数

我希望将一个弧度数组转换为范围,[0, 2*pi)并且numpy unwrap函数正是我需要的

但是,当我运行以下代码输入时a = [pi, 2*pi, 3*pi]:

import numpy as np

a = np.array([np.pi, 2*np.pi, 3*np.pi])
np.unwrap(a)
Run Code Online (Sandbox Code Playgroud)

我希望结果接近[pi, 0, pi].但是,输出仍然是:

array([ 3.14159265,  6.28318531,  9.42477796])
Run Code Online (Sandbox Code Playgroud)

它没有打开包装.但是,如果我在不使用的情况下运行以下命令numpy.pi

a = np.array([3.14159265,  6.28318531,  9.42477796])
np.unwrap(a)
Run Code Online (Sandbox Code Playgroud)

输出是正确的:

array([  3.14159265e+00,   2.82041412e-09,   3.14159265e+00])
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

python pi numpy python-2.7

4
推荐指数
1
解决办法
4891
查看次数

C++编译器 - 忘记了返回语句

我写了一个简单的函数来返回一个字符串让我在屏幕上显示.

static std::string  myFun(int myId){
  std::ostringstream stream;
  int myStatus;
  if(get_status(&myStatus)) stream << get_error();
  else{
    stream << "my status:" << myStatus;
  }
    return stream.str();
}
Run Code Online (Sandbox Code Playgroud)

代码本身可能并不重要.但我把它包含在以防万一.我遇到的问题是因为在我最初的尝试中,我忘了包含return语句

return stream.str();
Run Code Online (Sandbox Code Playgroud)

编译器编译没有错误,但是当我运行它时.该程序不断收到消息

Aborted(core dumped)
Run Code Online (Sandbox Code Playgroud)

我吓坏了,我搜索了stackoverflow并安装了valgrind和一切.然后我检查代码,我意识到我只是忘记包含return语句!我希望编译器能够注意到这些错误.

有人可以向我解释为什么编译器无法检测到错误吗?

c++ compiler-errors

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

将模板 2D std:array 初始化为 0 的最快方法

我有一个模板化的二维数组std::array< std::array<ScalarType ,3> ,3 > my_array,我想在程序中的不同时间将它们全部设置为零。看起来我可以使用std::array::fill但是

my_array.fill(0);
Run Code Online (Sandbox Code Playgroud)

不管用。如何正确填充二维数组?

c++ arrays templates stl initialization

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

是什么使数据结构递归?

我正在阅读有关递归数据类型的信息 ,该数据类型具有以下引号:

在计算机编程语言中,递归数据类型(也称为递归定义,归纳定义或归纳数据类型)是值的数据类型,该值可能包含相同类型的其他值

我知道,链表和树可以是递归数据类型,因为它包含相同数据结构的较小版本,例如树可以具有子树。

但是,这让我真的很困惑,因为固定大小的数组还不包含子数组吗?哪个仍然是同一类型?

有人可以举例说明什么使数据结构递归吗?

tree recursion linked-list graph-algorithm

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