小编bob*_*nto的帖子

将注释框添加到 matplotlib 等高线/热图图

我想生成一个带颜色条的等高线图/热图,然后添加一个注释框。这个数字很难看,但得到了我想要的:

示例图像

add_subplot()是不足够的。如果我尝试将所有内容都放在同一个子图中,则框会被掩盖。我可以通过使其可拖动然后调整图像大小来解决这个问题,但这并不好。我将不得不制作几个这样的图像,所有图像都是标准尺寸,我不能一遍又一遍地与尺寸作斗争。

我也尝试axes()过,将盒子放在一个单独的轴上。但这会生成一个新的绘图窗口,覆盖了我的大部分颜色条。我想会有办法让窗口完全透明。但是当我到了那个点时,我认为我的方法一定是完全错误的。

这似乎不应该那么难。有任何想法吗?

python annotations matplotlib

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

mpi4py Sendrecv 的使用

我正在尝试学习mpi4py。下面的测试代码对我来说看起来很简单

#shift.py

from mpi4py import MPI

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

nxt = (rank+1)%size
prev = (rank-1)%size

num = rank
num2 = 0

print rank, num

num2 = comm.Sendrecv(num,dest=nxt,source=prev)

print rank, num2
Run Code Online (Sandbox Code Playgroud)

但是运行的东西......

mpirun -np 4 python shift.py
Run Code Online (Sandbox Code Playgroud)

...从所有过程中引发此错误:

TypeError: message: expecting buffer or list/tuple
Run Code Online (Sandbox Code Playgroud)

我一直无法在 Sendrecv 上找到任何相当完整的文档。知道我做错了什么吗?

python communication mpi4py

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

strstr的微妙之处?

我有一个二进制数据文件,其中包含各种字符串.我正在尝试编写一个C代码来查找文件中第一次出现用户指定的字符串.(我知道这可以用bash完成,但出于其他原因我需要一个C代码.)现在的代码是:

#include <stdio.h>
#include <string.h>

#define CHUNK_SIZE 512

int main(int argc, char **argv) {
    char *fname = argv[1];
    char *tag = argv[2];
    FILE *infile;
    char *chunk;
    char *taglcn = NULL;
    long lcn_in_file = 0;
    int back_step;
    fpos_t pos;

    // allocate chunk
    chunk = (char*)malloc((CHUNK_SIZE + 1) * sizeof(char));

    // find back_step
    back_step = strlen(tag) - 1;

    // open file
    infile = fopen(fname, "r");

    // loop
    while (taglcn == NULL) { 
        // read chunk
        memset(chunk, 0, (CHUNK_SIZE + 1) * sizeof(char)); …
Run Code Online (Sandbox Code Playgroud)

c string strstr

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

一个简单的可选参数如何导致数据损坏?

我有一个带有例程的 FORTRAN 代码:

SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA)
integer ncid, recid
character*(*) varname
real*8 vardata
dimension vardata(15,45,75)

etc.
Run Code Online (Sandbox Code Playgroud)

我想为这段代码添加一些灵活性,我想我会通过首先添加一个可选的标志参数来实现:

SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA, how_to_calculate)

! everything the same and then ...
logical, optional :: how_to_calculate
Run Code Online (Sandbox Code Playgroud)

现在,我什至没有使用“how_to_calculate”。我只是将其放入代码中进行测试。所以我顺利地编译了代码。然后我运行它,在子例程中出现错误。具体来说,稍后代码中的某些值会“神奇地”改变为没有该可选参数的值。新值对代码逻辑没有意义,因此它会礼貌地退出并显示错误消息。让我再次强调,此时我什至没有使用这个可选参数。然后,我高兴地回到源代码中调用此例程的所有位置,即使我的新参数是可选的,我也会在所有调用中为其添加值。当我这样做时,代码运行良好。那么这是什么一回事?子例程中仅存在未使用的可选参数如何会导致其他数据被损坏?为这个可选参数添加输入参数如何再次解决问题?顺便说一句,这是用 PGI 编译的。

有任何想法吗?谢谢。

顺便说一句,很抱歉没有提供更多代码。如果我这样做的话,我的老板可能会对我不太满意。规则不是我制定的;我只是在这里工作。

fortran90 pgf

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

如何将值列表分配给python netcdf4变量对象?

我正在尝试将netCDF4软件包与python一起使用。我想做一些我认为应该简单明了的事情,但是我无法使其工作,也找不到任何文档。我有一个列表,我只想将列表存储在netCDF4.Variable对象中。我以为这段代码会将“ newlist”存储在netCDF4.Variable对象“ x_data”中,该对象是数据集对象“ netdata”的组成部分:

netdata.variables['x_data'][:]=numpy.array(newlist)
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。我收到错误消息:

ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我已经导入了netCDF4和numpy。顺便说一句,如果我不将newlist转换为numpy数组,就会遇到相同的错误。

当然,有一种方法可以做到这一点。有人知道吗?谢谢。

附录:这个简单的更改使我摆脱了错误消息:

netdata.variables['x_data']=newlist
Run Code Online (Sandbox Code Playgroud)

但是我仍然没有走出困境。数据肯定存储在netdata.variables ['x_data']中,但是随后我关闭netdata并退出python,然后检查netCDF输出,而数据就不存在了。有任何想法吗?再次感谢。

python numpy netcdf

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

python函数的编码风格

需要一个意见.

我有一个定义一些数据的函数.我的想法是用户可以告诉它从文件中读取数据:

acquire_data('read_from_file',filename)
Run Code Online (Sandbox Code Playgroud)

或者用户可以直接提供数据:

acquire_data('use_this_list',datalist)
Run Code Online (Sandbox Code Playgroud)

所以函数会有类似的形式

def acquire_data(mode,arg2):
    if mode == 'read_from_file':
        inputs=open(arg2)
        data = #etc.
    else:
        data = arg2  #or deepcopy(arg2) or whatever
Run Code Online (Sandbox Code Playgroud)

嗯,这有效,但似乎有点老套.特别是,"arg2"具有非常不同的功能,具体取决于"模式"的值.那么:这个好代码吗?这是"pythonic"吗?有人看到更好的方法来编码吗?谢谢.

python coding-style

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

再次使用Python过滤字典

是的,这个网站上有很多关于装配python字典的问题.但是我所看到的一切都没有达到我想做的事情.所以,我有一本字典.它包含一些列表和一些数据值列表.就像是

data_and_time = {"time":['2:30','2:45','3:25','5:15','7:21','8:22'],
                 "data":[    5.,    7.,    2.,    3.,    8.,   10.]}
Run Code Online (Sandbox Code Playgroud)

我想过滤这个,例如,我只有大于或等于5的数据值.结果是:

data_and_time_5 = {"time":['2:30','2:45','7:21','8:22'],
                   "data":[    5.,    7.,    8.,   10.]}
Run Code Online (Sandbox Code Playgroud)

我可以想到几种方法来做到这一点 - 所有这些都非常难看并且需要多行代码.我想要一种优雅,可读的方式来做到这一点.python词典有这样的方法吗?(顺便说一下,时间表示为字符串是完全偶然的,这只是我在这里表达问题的一种紧凑方式.)谢谢.

python dictionary filter

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

令人困惑的C typedef语法

希望有人可以帮我解读这个C片段:

typedef int (DEFCALL *getFieldVal)(int key, int fieldSelect, char *name)
Run Code Online (Sandbox Code Playgroud)

DEFCALL在代码中已定义,但仅限于

#define DEFCALL
Run Code Online (Sandbox Code Playgroud)

所以,我认为DEFCALL这只是一个空白,我正在有效地看待

typedef int (*getFieldVal)(int key, int fieldSelect, char *name)
Run Code Online (Sandbox Code Playgroud)

它将getFieldVal定义为指向带有args int,int和char*的函数的指针,并返回一个整数.但是让DEFCALL我感到疑惑.想要确定.

c typedef c-preprocessor

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

在矩阵向量乘法中我可以期待多少并行加速?

我编写了一个 MPI 例程来并行化矩阵向量乘法。速度的提升已经令人失望到不存在。我在网上找到了很多例程,我处理这个的方式与大多数例程相同。我没能找到很多关于真实机器上真实加速的数据。我正在处理我认为是一个中等规模的问题——一个大小从 100x100 到 1000x1000 的矩阵和从 2 到 64 个处理器的数量。我正在以大致方形的棋盘方式分解矩阵。任何人都可以指出我在这个问题大小和处理器数量范围内可以实际希望获得什么样的加速的任何数据?谢谢。

mpi matrix-multiplication fortran90

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

查找 Fortran 数组中的第一个和最后一个正值

我有一个整数数组。其中一些值为零,至少一些值大于零。我想找到数组中第一个和最后一个正值的位置。当然,这可以通过循环来完成。但是对于现代 Fortran 数组功能,我认为一定有更紧凑和优雅的东西。但我什么也没发生。有人知道有什么好方法吗?

arrays fortran

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