小编Han*_*bel的帖子

在sympy表达式中使用LaTeX符号

我想做一些计算,然后使用sympy绘制.我想使用一致的符号,所以我需要定义一个符号,它将打印为$\Delta_l ^ y $.

到目前为止我尝试了什么:

delta__i_0 = sympy.symbols('Delta__i_0')
sympy.pprint(delta__i_0)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.不幸

delta__y_l = sympy.symbols('Delta__y_l')
sympy.pprint(delta__y_l)
Run Code Online (Sandbox Code Playgroud)

真的不太好看.有任何想法吗?

python latex sympy

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

g ++:optimization -march = haswell和更新更改数值结果

当我注意到g ++似乎根据所选优化改变结果时,我一直在努力优化性能,当然还在进行回归测试.到目前为止,我认为-O2 -march=[whatever]无论选择何种架构,都应该为数值计算产生完全相同的结果.然而,对于g ++来说似乎并非如此.虽然使用旧架构到ivybridge产生与clang对任何架构相同的结果,但是对于haswell和更新的gcc,我得到了不同的结果.这是gcc中的错误还是我误解了有关优化的内容?我真的很吃惊,因为clang似乎没有表现出这种行为.

请注意,我很清楚差异在机器精度范围内,但它们仍然会干扰我的简单回归检查.

这是一些示例代码:

#include <iostream>
#include <armadillo>

int main(){
    arma::arma_rng::set_seed(3);
    arma::sp_cx_mat A = arma::sprandn<arma::sp_cx_mat>(20,20, 0.1);
    arma::sp_cx_mat B = A + A.t();
    arma::cx_vec eig;
    arma::eigs_gen(eig, B, 1, "lm", 0.001);
    std::cout << "eigenvalue: " << eig << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编译使用:

g++ -march=[architecture] -std=c++14 -O2 -o test example.cpp -larmadillo
Run Code Online (Sandbox Code Playgroud)

gcc版本:6.2.1

铿锵版:3.8.0

编译为64位,在Intel Skylake处理器上执行.

c++ g++ compiler-optimization gcc6

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

图例中的颜色与图表颜色不匹配

我正在尝试制作自定义图例,仅显示一些绘制的线条。但是,图例中的颜色并不总是与绘制线的颜色匹配。在示例中,图例 1 和图例 2 很好,但图例 3 应显示蓝色和绿色,而不是蓝色和橙色。请参阅附图。我怎样才能解决这个问题?

图例 3 应为蓝色 (0) 和绿色 (2)

这是我用来生成图像的 mwe,但请注意,在实际程序中,绘图函数不能直接访问并从不同的文件加载。此外,不应修改绘图函数,因为它也在其他程序中使用。

import matplotlib.pyplot as plt
import numpy as np

def my_plot_function(x,y,ax):
    #do complicated stuff here, manipulating y for example
    ax.plot(x,y)

x = np.linspace(0,1,100)
fig = plt.figure()
ax = fig.add_subplot(111)

my_plot_function(x, x, ax)
my_plot_function(x, x**2, ax)
my_plot_function(x, x**3, ax)
my_plot_function(x, x**4, ax)

lines = ax.get_lines()
print(lines[0])
print(lines[1])
print(lines[2])
print(lines[3])

fig.legend(lines, labels=range(4), loc=1, title="legend 1")
fig.legend([lines[0],lines[1]], labels=["0","1"], loc=2, title="legend 2")
fig.legend([lines[0],lines[2]], labels=["0","2"], loc=3, title="legend 3")
plt.show()
Run Code Online (Sandbox Code Playgroud)

编辑:
为了澄清我的要求:绘图需要通过my_plot_function在单独的文件中定义并且不能修改来完成。因此我无法向它传递其他关键字,例如label.

python graph matplotlib

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

使用Cython进行复值计算

我正在尝试使用cython进行复数计算.在示例代码中,我想计算复数的复指数函数.问题是我不知道如何将我的整数乘以虚数单位.乘以python的虚部1.0j会在执行cython时引发错误.

这是我的代码:

cdef extern from "math.h":
    double complex cexp(double complex)

def testfunction():
    cdef double n
    n=3
    cdef double complex res
    res=cexp(n*1.0j)
    return res
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

complex.c:678:3:注意:预期'复数double'但参数类型为'__pyx_t_double_complex'

cython

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

C++ 指针段错误没有编译器警告,在先前分配时有效

我很难理解指针以及它们如何/何时失败。所以我制作了一个小程序,它创建一个指针,为其分配一个值,然后打印该值。使用 gcc 和 clang 都可以正常编译,并且在使用 -Wall 开关时不会给出任何警告。为什么它会出现段错误,为什么当我首先为指针分配不同的值时不会出现段错误?我以为我已经初始化了指向某个地方的指针。当我只是声明指针而不进行初始化时,我理所当然地收到编译器警告。但是,在这里我没有收到编译器警告,但它仍然存在段错误。

#include<iostream>

int main(){
  int *b = (int*)  12;  //pointer gets initialized, so it points to somewhere
  //int a = 13;   //works fine when uncommenting this and the next line
  //b = &a;
  *b = 11;
  std::cout << "*b = " << *b << "\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers segmentation-fault

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