小编Aer*_*ius的帖子

如何在Inkscape中将SVG的大小从A1调整为A0

我正在使用SVG格式的Inkscape制作海报.我在A1中设计了海报,但需要将其重新缩放为A0格式.如何进行放大?

svg vector-graphics inkscape image-resizing

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

如何为z = f(x,y)绘制平滑的2D颜色图

我正在尝试使用matplotlib 绘制2D场数据.所以基本上我想要类似的东西:

在此输入图像描述

在我的实际情况中,我将数据存储在我的硬盘上的文件中.但是为简单起见,考虑函数z = f(x,y).我想要一个平滑的2D绘图,其中z使用颜色可视化.我使用以下代码行管理绘图:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 21)
y = np.linspace(-1, 1, 21)
z = np.array([i*i+j*j for j in y for i in x])

X, Y = np.meshgrid(x, y)
Z = z.reshape(21, 21)

plt.pcolor(X, Y, Z)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,我获得的情节非常粗糙.是否有一种非常简单的方法来平滑情节?我知道surface情节可能类似,但是,那些是3D.我可以改变相机角度以获得2D表示,但我确信有一种更简单的方法.我也尝试了imshow但是我必须考虑graphic原点位于左上角的坐标.

问题解决了

我设法解决了我的问题:

plt.imshow(Z,origin='lower',interpolation='bilinear')

python plot matplotlib

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

我应该将哪些C++库用于利用第三方应用程序的大型并行计算数字运算项目

介绍

我想就我将要自己开始的新编程项目请求很多建议.对于我想要完成的事情以及我的基本要求,我将非常精确.因此,这将是一个长期的问题.请多多包涵.

我将把问题分为五个部分:

  1. 现实世界的问题
  2. 模拟问题
  3. 要求和偏好
  4. 附加信息
  5. 建议请求列表

1.现实世界的问题

摩天大楼和大型桥梁受到动态风荷载的影响.这意味着,如果设计不正确,它们会因风引起的振动而崩溃(这实际上发生在1940年:http://www.youtube.com/watch?v = 3mclp9QmCGs).为了正确设计这样的结构,需要有效的数字运算软件进行分析和模拟.

2.模拟问题

存在许多能够模拟流体流动或结构力学的软件.许多已经开发了30多年,并且是经过验证和成熟的技术.因此,编写一个能够同时模拟流体流动和结构力学的多物理程序是不明智的.首先,在成熟之前需要多年的开发才能进入一个依赖特定软件超过30年的世界.但更重要的是......为什么在重用时重新创建?我不喜欢采用单片方法,而是采用分区方法,可以重用现有的仿真软件.

在分区方法中,我将使用软件X来模拟流程,我将使用软件Y来模拟结构.然后我将编写自己的耦合算法,建立X和Y之间的通信,并使用它们来模拟多物理问题(例如摩天大楼或桥梁的风引起的振动).我使用X和Y而不是实际软件名称的原因是因为X和Y应该是黑盒子.我的耦合算法决不依赖于X和Y的实现.算法将仅依赖于X和Y的输出.这样最终用户可以选择哪个X或Y可用于哪个或哪个永远X或Y能够做到最终用户想要实现的目标.

因为我想使用黑盒分区方法,软件X不知道Y,反之亦然.但是,如何在不知道周围气流的情况下模拟桥梁的变形,以及如何知道周围气流在不知道任何变形的情况下被周围气流扰动的方式?答案很简单:从猜测开始,使用迭代方法收敛到正确的解决方案.然而,这种方法在计算上非常昂贵.为了降低计算成本,可以使用非常有效的技术以巧妙的方式编写耦合算法,这里不再讨论.我想说的是需要一些重线性代数数字运算.

3.要求和偏好

我需要做的是:

  • 建立第三方开源或专有软件之间的通信
  • 执行一些重数字运算(线性代数)
  • 可视化结果(2D/3D绘图和动画)
  • 提供交互式分析和开发环境
  • 创建直观的图形用户界面

我想要的软件是什么:

  • 开源
  • 跨平台
  • 可通过脚本和/或共享库进行扩展

我打算用什么:

  • 用于重数字运算的C++
  • CPython用于编程逻辑
  • NumPy/SciPy在CPython中进行一些数字运算
  • Matplotlib用于CPython中的结果可视化

4.补充资料

事实:

  • 一开始就是单人项目,如果成功就会成长为公司
  • 主操作系统是基于KDE的Linux发行版

商业模式:

  • 免费软件和基本文档.
  • 付费服务和精心制作的文档.

5.建议请求清单

我想通过编写许多单独执行一项微小任务的函数来完成C++中的所有数字运算.程序逻辑将包含在CPython包中,该包执行整个模拟,同时依靠C++函数执行数字运算.C++/CPython算法将使用CPython(使用NumPy,SciPy,SymPy和Matplotlib)编写的脚本进行扩展,以生成和可视化原始数值数据的结果.我希望能够进行并行计算,我需要与几个第三方开源和专有软件进行通信.

要完成所有这些我将需要一大堆现有的库/包/技术等.对于所有相关问题,我知道我可以使用什么,但是我不知道我应该使用什么.最好的解决方案是一如既往地尝试一切,看看最有效的方法.但是,如果任何有经验的用户可以淘汰一些更不可能的候选人,我很乐意收到他或她的建议,建议,赞成/列表:

  1. 粘贴C++和CPython(例如CTypes,SIP,SWIG等)
  2. C++线性代数数字运算库(例如Armadillo,Eigen,PETSc等)
  3. 图形界面开发库(例如Qt,GTK,wxWidgets等)
  4. 软件通信和并行计算(例如MPICH,OpenMPI,OpenMP等)
  5. CPython 2.7.x或CPython 3.x.

注意:我总结了上面的一些选项,但这些只是示例性而非限制.只要它是用C,C++,Fortran或Python编写的,我对所有东西都是开放的.此外,我不希望在一个人的上述所有五个类别中得到答案.让社区的集体知识来处理这个问题.

我感谢所有的贡献者,并祝你在自己的努力中一切顺利.

c++ python parallel-processing user-interface linear-algebra

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

如何为变量分配绘图并将该变量用作Python函数中的返回值

我正在创建两个Python脚本来为技术报告生成一些图.在第一个脚本中,我定义了从硬盘上的原始数据生成绘图的函数.每个函数都会生成一个我需要的特定类型的图.第二个脚本更像是一个批处理文件,它应该绕过这些函数并将生成的图存储在我的硬盘上.

我需要的是一种在Python中返回绘图的方法.所以基本上我想这样做:

fig = some_function_that_returns_a_plot(args)
fig.savefig('plot_name')
Run Code Online (Sandbox Code Playgroud)

但我不知道的是如何使情节成为我可以返回的变量.这可能吗?是这样,怎么样?

python plot matplotlib return-value

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

使用Julia解决大型系统时堆栈溢出

我正在尝试使用Octave和Julia解决具有大平方系统矩阵的随机线性系统。因为Octave和Julia的语法非常相似,所以我在Octave Shell和Julia Shell中都运行以下代码:

N = 5000;
A = rand(N, N);
b = rand(N, 1);
x = A\b;
r = norm(A*x - b)/norm(b)
Run Code Online (Sandbox Code Playgroud)

八度返回1e-12附近的r。另一方面,Julia返回错误:

ERROR: stack overflow
 in getrf! at linalg/lapack.jl:342
 in LU at linalg/factorization.jl:134
 in \ at linalg/dense.jl:518
Run Code Online (Sandbox Code Playgroud)

反斜杠运算符确实适用于较小的系统(例如10 x 10)的Julia,但是50 x 50的系统已经给出了错误。据我了解,Octave和Julia都使用BLAS和LAPACK,所以我很困惑为什么Julia无法执行此任务。有人可以告诉我如何解决此问题吗?

系统信息

编辑

现在已经解决了OpenBLAS 0.2.7的问题。重新编译Julia时,请确保Julia使用OpenBLAS> = 0.2.7的系统版本,或者Julia在内部编译自己的OpenBLAS> = 0.2.7的版本。

matlab octave blas lapack julia

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

为什么Fortran中的单变量Horner比NumPy更快,而双变量Horner则不然

我想在Python中执行多项式计算.该polynomial封装numpy是不是对我不够快.因此,我决定在Fortran中重写几个函数,并用于f2py创建易于导入Python的共享库.目前,我正在对我的例程进行基准测试,以进行单变量和双变量多项式评估numpy.

在单因素例行我用霍纳的方法一样numpy.polynomial.polynomial.polyval.我观察到Fortran例程比numpy对应例程快的因子随着多项式的阶数的增加而增加.

在双变量例程中,我使用Horner的方法两次.首先是y,然后是x.遗憾的是,我观察到,为了增加多项式阶数,numpy对手会赶上并最终超越我的Fortran例程.由于numpy.polynomial.polynomial.polyval2d使用类似于我的方法,我认为这第二个观察是奇怪的.

我希望这个结果源于我对Fortran和f2py.的经验不足.有人可能有任何线索为什么单变量例程总是显得优越,而双变量例程只对低阶多项式优越?

编辑 这是我最新的更新代码,基准脚本和性能图:

polynomial.f95

subroutine polyval(p, x, pval, nx)

    implicit none

    real(8), dimension(nx), intent(in) :: p
    real(8), intent(in) :: x
    real(8), intent(out) :: pval
    integer, intent(in) :: nx
    integer :: i

    pval = 0.0d0
    do i = nx, 1, -1
        pval = pval*x + p(i)
    end do

end subroutine polyval

subroutine polyval2(p, x, y, pval, nx, ny) …
Run Code Online (Sandbox Code Playgroud)

python arrays fortran numpy f2py

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

如何加速局域网中的 scp 文件传输

介绍

我正在尝试使用scp来自终端的命令通过 ssh 传输文件。我实现的传输速率很差,远低于我在互联网上看到的。我需要一些帮助来加快速度。

硬件

  • 戴尔 Latitude D830
  • 戴尔 XPS 15
  • Experia Box V8 路由器

软件

  • Chakra Linux(两者)
  • Linux 内核 3.12.6-1(两者)
  • KDE 4.12.1 (XPS)
  • KDE 4.12.0(纬度)
  • OpenSSH_6.2p2(两者)
  • OpenSSL 1.0.1e(两者)

网络

  • 笔记本电脑连接到 WiFi(无以太网连接)
  • 笔记本电脑相距 5 厘米,距离路由器 50 厘米
  • 笔记本电脑在同一个局域网内

测试

我使用以下方法将电影 Mud (Mud.mp4 = 690 MB) 从 Latitude 传输到 XPS 笔记本电脑:

scp 192.168.2.3:~/Videos/Mud.mp4 ~/
Run Code Online (Sandbox Code Playgroud)

传输速率:~1.6 MB/s

scp -c arcfour 192.168.2.3:~/Videos/Mud.mp4 ~/
Run Code Online (Sandbox Code Playgroud)

传输速率:~1.6 MB/s

scp -C -c arcfour 192.168.2.3:~/Videos/Mud.mp4 ~/
Run Code Online (Sandbox Code Playgroud)

传输速率:从 ~4.5 MB/s 开始在 ~55 秒内下降到 ~1.6 MB/s

河豚的结果几乎相似。

题 …

ssh lan scp openssh file-transfer

5
推荐指数
0
解决办法
4356
查看次数

Cython要么比纯Python略快或慢

我正在使用几种技术(NumPy,WeaveCython)来执行Python性能基准测试.代码基本上在数学上做的是C = AB,其中A,B和C是N x N矩阵(注意:这是矩阵乘积而不是逐元素乘法).

我编写了5个不同的代码实现:

  1. 纯python(在2D Python列表上循环)
  2. NumPy(2D NumPy阵列的点积)
  3. 编织内联(在2D数组上的C++循环)
  4. Cython(循环遍历2D Python列表+静态类型)
  5. Cython-Numpy(循环2D NumPy数组+静态类型)

我的期望是实现2到5将比实现1快得多.但是我的结果表明不是这样.这些是我相对于纯Python实现的标准化加速结果:

  • python_list:1.00
  • numpy_array:330.09
  • weave_inline:30.72
  • cython_list:2.80
  • cython_array:0.14

我对NumPy的表现非常满意,但是我对Weave的表现并不那么热衷,而Cython的表现让我哭了.我的整个代码分为两个文件.一切都是自动化的,您只需运行第一个文件即可查看所有结果.有人可以帮助我指出我能做些什么来获得更好的结果吗?

matmul.py:

import time

import numpy as np
from scipy import weave
from scipy.weave import converters

import pyximport
pyximport.install()
import cython_matmul as cml


def python_list_matmul(A, B):
    C = np.zeros(A.shape, dtype=float).tolist()
    A = A.tolist()
    B = B.tolist()
    for k in xrange(len(A)):
        for i in xrange(len(A)):
            for j in …
Run Code Online (Sandbox Code Playgroud)

python numpy cython scipy python-2.7

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

如何在2D和3D空间中计算多边形的中心

考虑2D笛卡尔空间中的简单凸多边形.如果给出以这样的逆时针方向排序的顶点坐标列表[[x0, y0], ..., [xn, yn]].你怎么能计算多边形的中心(多边形内部与所有顶点等距的点)?

还要考虑第二种情况,其中多边形放置在3D笛卡尔空间中,其法向量不平行于任何笛卡尔轴.如何在不旋转多边形的情况下计算中心?

我可以阅读C/C++,Fortran,MATLAB和Python,但是任何伪代码也都很受欢迎.

编辑

我现在意识到我的问题没有得到很好的解决.我对此感到抱歉.似乎我所寻找的是多边形的质心(即,在假设均匀密度和均匀重力场的情况下纸板切口将平衡的点).

c++ python matlab geometry polygon

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

使用ctypes包装C++:未定义的符号

我正在尝试包装C++以便在Python中使用C++函数.目前我正在尝试ctypes,不幸的是,我还没有成功.对于初学者,我用C++编写了一个Hello World程序,我试图用ctypes从Python中调用它.这就是我所做的:

path_to_dir $ vim helloworld.cpp

1: #include <iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:     cout << "Hello, world!" << endl;
8:     return 0;
9: }

path_to_dir $ gcc -shared -Wl,-soname,hello_module -o hello_module.so -fPIC helloworld.cpp
path_to_dir $ vim helloworld.py

1: import ctypes
2:
3: libc = ctypes.cdll.LoadLibrary("path_to_dir/hello_module.so")
4: 
5: libc.main()

path_to_dir $ python helloworld.py

Traceback (most recent call last):
  File "helloworld.py", line 3, in <module>
    libc = ctypes.cdll.LoadLibrary("/home/carlos/Workspace/Freestyle/Wrapping_C++/ctypes/hello_module.so")
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary …
Run Code Online (Sandbox Code Playgroud)

c++ python ctypes shared-libraries word-wrap

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

我应该将C ++应用程序链接到间接使用的共享库吗

比方说,你编译C ++共享库libBeta.so,这使得利用预现有的C ++共享库libAlpha1.solibAlpha2.solibAlpha3.so,等。如果我接着写它使用C ++应用程序libBeta.so直接(并因此间接使用其它库),我要我的应用程序链接到libBeta.so只,还是应该将我的应用程序链接到所有库?

我的直觉告诉我,我应该只链接到libBeta.so,因为链接到所有库似乎libBeta.so已经是多余的,就像已经链接到其他库一样。但是,undefined reference to错误证明了我的直觉是错误的。

有人可以解释一下为什么我的直觉在某些情况下可能是错误的吗?

ps:

  • 操作系统:Linux
  • 编译器:g ++

编辑

事实证明,我用于编译的工具在编译可执行文件和编译共享库时具有不同的行为。编译共享库时,省略了与子库的链接:(

c++ compilation g++ shared-libraries dynamic-linking

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

使用Cython而不是CPython + NumPy没有速度提升

对于单一分配,我在MATLAB中编写了一个2D平方域流求解器.为了研究Python,我已经将MATLAB代码转换为Python.我使用NumPy进行所有矩阵向量乘法,我使用scipy.sparse.linalg.spsolve()来求解Ax = b,其中A是40x40且稀疏.

最后,我对解算器的速度并不太满意.因此,我使用Spyder中包含的分析器来追踪瓶颈.基本上,除了系统求解(使用上述方法)之外,所有线性代数运算都非常快.毫不奇怪,因为解决系统总是比仅增加一些向量和矩阵更昂贵.

我转向Cython来加速我的求解器.我阅读了http://wiki.cython.org/tutorials/numpy,我通过给每个变量一个静态类型(是的,我知道这不是最聪明或最有效的方式,但我急着看结果,并将在此后做适当的工作).我唯一没有给出静态类型的是稀疏矩阵A,因为它是一个CSR稀疏矩阵,我还不知道如何静态输入它.是的,我知道这是最重要的部分,因为分析表明系统解决了瓶颈.

在最终使用Cython编译所有内容之后,结果与没有Cython的结果完全相同......我确实理解Cython性能提升不会很好,因为我没有解决瓶颈,但是我不明白为什么Cython版本没有即使只快1%也不会跑.

有人可以帮助我从Cython中受益吗?如何让我的代码运行得更快?我应该如何从scipy静态类型中提供CSR稀疏矩阵?

我的代码可以使用此google云端硬盘链接下载:https: //docs.google.com/file/d/0B-nchNKLtgjeWTE4OXZrVUpfcWs/edit?usp =sharing

python numpy linear-algebra cython scipy

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