小编sna*_*mer的帖子

如何检查scipy的版本

如何查看scipy系统上安装的版本?

python scipy

67
推荐指数
3
解决办法
9万
查看次数

如何在matplotlib中移动tick的标签?

我想沿着x轴水平移动一些刻度标签,而不移动相应的刻度.

更具体地说,当旋转标签时plt.setp,标签文本的中心保持与刻度线对齐.我想将这些标签向右移动,以便标签的近端对齐,如下图所示.

在此输入图像描述

我知道这篇文章这一个,但答案很有意思组装机,而不是严格的问题的答案.

我的代码:

import matplotlib.pyplot as plt
import numpy as np
import datetime

# my fake data
dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365*5)])
data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3

# creates fig with 2 subplots
fig = plt.figure(figsize=(10.0, 6.0))
ax = plt.subplot2grid((2,1), (0, 0))
ax2 = plt.subplot2grid((2,1), (1, 0))
## plot dates
ax2.plot_date( dates, data )

# rotates labels 
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 ) 

# try to shift labels …
Run Code Online (Sandbox Code Playgroud)

python label matplotlib

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

mpi4py中的共享内存

我使用MPImpi4py)脚本(在单个节点上),该脚本可用于非常大的对象。为了让所有进程都可以访问该对象,我通过分发了该对象comm.bcast()。这会将对象复制到所有进程,并占用大量内存,尤其是在复制过程中。因此,我想共享诸如指针之类的东西,而不是对象本身。我发现一些memoryview有用的功能有助于增强流程中对象的工作。同样,对象的实际内存地址也可以通过memoryview对象字符串表示形式进行访问,并且可以这样分配:

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

if rank:
    content_pointer = comm.bcast(root = 0)
    print(rank, content_pointer)
else:
    content = ''.join(['a' for i in range(100000000)]).encode()
    mv = memoryview(content)
    print(mv)
    comm.bcast(str(mv).split()[-1][: -1], root = 0)
Run Code Online (Sandbox Code Playgroud)

打印:

<memory at 0x7f362a405048>
1 0x7f362a405048
2 0x7f362a405048
...
Run Code Online (Sandbox Code Playgroud)

这就是为什么我认为必须有一种方法可以在另一个过程中重构对象。但是,我在文档中找不到有关如何执行此操作的线索。

简而言之,我的问题是:是否可以在中同一节点上的进程之间共享对象mpi4py

mpi shared-memory python-3.x memoryview mpi4py

6
推荐指数
2
解决办法
1928
查看次数

循环遍历未终止的批处理脚本

我试图在python循环中执行几个批处理脚本.然而,所述bat-scripts包含cmd /K并因此不"终止"(因为没有更好的词).因此python调用第一个脚本并永远等待...

这是一个伪代码,可以让我了解我要做的事情:

import subprocess

params = [MYSCRIPT, os.curdir]    
for level in range(10):
    subprocess.call(params)  
Run Code Online (Sandbox Code Playgroud)

我的问题是:"是否有一个pythonic解决方案来恢复控制台命令并恢复循环?"


编辑:我现在意识到可以启动子进程并继续使用,而无需等待它们返回

Popen(params,shell=False,stdin=None,stdout=None,stderr=None,close_fds=True)

然而,这将几乎同时启动我的整个循环.有没有办法等待子进程执行其任务,并在它到达cmd /K并变为空闲时返回.

python windows subprocess batch-file

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

使用ArtistAnimation在matplotlib中动画制作png

我一直在尝试使用有限元方法为2D热流问题创建一系列表面图.在每个时间步,我保存了一个图而不是整个矩阵,以便更有效率.

FuncAnimation在matplotlib.animation库中遇到了麻烦,所以我决定每次都渲染一个曲面图,将曲面图保存为.png文件,然后使用它来读取该图像pyplot.imread.从那里,我想将每个图像存储到一个列表中,以便我可以使用ArtistAnimation(示例).然而,它不是制作动画,而是当我打印imgplot到屏幕时,我得到两个单独的空白图,然后我的表面图.pngs .

此外,当我尝试保存动画时,我收到以下错误消息:

AttributeError: 'module' object has no attribute 'save'.
Run Code Online (Sandbox Code Playgroud)

任何帮助从当前目录中读取一组.pngs,将它们保存在列表中,然后使用ArtistAnimation"动画"那些.pngs将非常感激.我不需要任何花哨的东西.

(注意 - 我必须使代码自动化,所以不幸的是我不能使用外部源来动画我的图像,如iMovie或ffmpeg.)

以下是我的代码:

from numpy import *
from pylab import *
import matplotlib.pyplot as plt 
import matplotlib.image as mgimg
from matplotlib import animation

## Read in graphs

p = 0
myimages = []

for k in range(1, len(params.t)):

  fname = "heatflow%03d.png" %p 
      # read in pictures
  img = mgimg.imread(fname)
  imgplot = plt.imshow(img)

  myimages.append([imgplot])

  p += 1


## …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib

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

将文本锚定或锁定到 Matplotlib 中的标记

有什么方法可以将文本锚定或锁定到标记吗?当使用 提供的交互式缩放时pyplot,文本会超出范围,如图所示。

import matplotlib.pyplot as plt

x=[2,4]
y=[2,3]

fig, ax = plt.subplots()
ax.plot(x, y, 'ro',markersize=23)

offset = 1.0 
ax.set_xlim(min(x)-offset, max(x)+ offset)
ax.set_ylim(min(y)-offset, max(y)+ offset)

for x,y in zip(x,y):
     ax.annotate(str(y),  xy=(x-0.028,y-0.028))

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

文字超出范围

python text annotate matplotlib marker

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

并行队列系统,是否有非阻塞等价于gather?mpi4py

我想在参数列表(比如 50)上创建一个循环。循环应该由多个处理器(比如 4 个)并行共享。我希望每个处理器从列表中选择下一个参数并使用此参数调用函数。函数评估预计花费的时间不等。这是我希望如何安排作业的草图:

pr0 ===job0=== | ========job5======= | 
pr1 =====job1======= | ==job7== |
pr2 ===job2=== | ===job6=== | 
pr3 =job3= | =========job4======== | 
Run Code Online (Sandbox Code Playgroud)

我希望每个进程都知道当前正在运行的作业的 ID,以便它可以选择列表中的下一个元素并开始使用它。到目前为止我尝试过的是使用comm.allgather()

from mpi4py import MPI
from random import random
from time import sleep


##### function that just wastes 0-10sec of our time
def run_test(counter, param ):
    time_to_waste = random() * 10
    sleep( time_to_waste )

    print " run job nr: ", counter, "with parameters: ", param, "in :", time_to_waste, "s"
    return 


#############   MAIN 
if …
Run Code Online (Sandbox Code Playgroud)

python loops mpi python-2.7 mpi4py

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

Shapely:3D 中直线和多边形之间的交点

上次我使用 shapely 时,我真的有这种美妙的导入和飞行的感觉。然而最近,我在这个模块中遇到了一个相当不直观的行为,因为我试图在 3D 空间中找到线段和三角形之间的交点。让我们定义一个线段和一个三角形,如下所示:

l = LineString([[1,0.5,0.5],[3,0.5,0.5]])
p = Polygon([[1.2,0.0,0.],[2.2,1.0,0.],[2.8,0.5,1.]])
Run Code Online (Sandbox Code Playgroud)

为了得到它们的交点,我使用了l.intersection(p),并期望有一个点,即POINT Z (POINT Z (2 0.5 0.25))。如下图蓝点所示:

在此输入图像描述

相反,我得到的是LINESTRING Z (1.7 0.5 0.25, 2.8 0.5 1)- 下面的红线 - 坦率地说,我对它应该代表什么感到非常困惑。 在此输入图像描述

奇怪的是,当多边形/三角形位于 xz 平面并与线段正交时,该函数的行为与预期一致。然而,当三角形“倾斜”时,它会返回一条线。这暂时让我相信它返回了直线和三角形边界框之间的交点。上面的红线证明事实并非如此。

因此,解决这个问题的方法是阅读这个非常有启发性的网页,并调整他们的C++代码以处理形状良好的对象。该intersection方法非常适合检查直线是否穿过多边形,并且下面的函数可以找到感兴趣的点。

def intersect3D_SegmentPlane(Segment, Plane):

    # Points in Segment: Pn  Points in Plane: Qn
    P0, P1     = np.array(Segment.coords)
    Q0, Q1, Q2 = np.array(Plane.exterior)[:-1]   

    # vectors in Plane
    q1 = Q1 - Q0
    q2 = Q2 …
Run Code Online (Sandbox Code Playgroud)

python geometry vector shapely

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

为 pyplot.plot() 寻找标记文本选项

我正在寻找一种将数字或文本插入标记的方法。matplotlib.pyplot.plot(*args, **kwargs)文档中没有关于这一点的内容。

默认缩放级别将标记放置在边缘上,从而减少了用于刻录文本的可用空间。

import matplotlib.pyplot as plt
x = [1, 2, 3, 4 ,5]
y = [1, 4, 9, 6, 10]
plt.plot(x, y, 'ro',markersize=23)
plt.show()
Run Code Online (Sandbox Code Playgroud)

python plot text matplotlib markers

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