我正在安装一些新软件.它包含"Lib"目录中的几个库.如果我ls Lib
来自另一个目录,我会得到通常的文件列表.我也可以发布dir
和file
命令并获得合理的结果.我甚至可以将这个目录中的文件复制到其他目录中.但是如果我cd到"Lib",似乎我给出的任何 linux命令都会返回一个seg错误.我无法运行ls
,file
或dir
在该目录中.date
没有seg故障,我甚至无法在那里跑.如果有人能帮助我澄清这个谜团,那就太有必要了.
我正在使用一些遗留的FORTRAN代码.作者定义了一个名为REDUCE_VEC()的函数(不是子程序,而是一个重要的函数).它接受一维数组并返回一个标量实数*8.因此,如果您想"减少"矢量,则可以调用该函数
RV = REDUCE_VEC(V1)
Run Code Online (Sandbox Code Playgroud)
一切都很好.但偶尔,他的线条看起来像
CALL REDUCE_VEC(V2)
Run Code Online (Sandbox Code Playgroud)
那么,有两个问题:1)这第二种形式的电话有什么作用?(注意,没有办法返回数据.)2)这甚至不会在gfortran下编译,即使它与PGI一起编译,所以这甚至是合法的FORTRAN?
谢谢.
我需要做一些类似于MPI_Gather的事情,但我需要按照与流程等级不同的顺序存储收集的数据.我以为我可以这样做:
int i;
int gathervals[10];
int my_val, my_place_in_storage;
/* init MPI etc ... then ... */
my_val = some_fcn_of_rank(my_rank, ...)
my_place_in_storage = some_other_fcn(my_val, my_rank, ...)
if (my_rank == 0){
/* my_val on proc 0 does go in gathervals[0], which simplifies
things */
gathervals[0] = my_val;
for (i=1; i<num_procs; i++){
MPI_Recv(&gathervals[i], 1, MPI_INT, MPI_ANY_SOURCE,
i, MPI_COMM_WORLD, stat_mpi);
}
}else{
MPI_Send(&mv_val, 1, MPI_INT, 0, my_place_in_storage,
MPI_COMM_WORLD);
}
Run Code Online (Sandbox Code Playgroud)
我的想法是proc 0将启动循环并等待从proc的发布发送my_place_in_storage
为1,然后proc 0将接收该消息并将值放入gathervals[1]
.然后它将迭代并等待,直到它看到来自proc的帖子my_place_in_storage
为2,等等.
这有用吗?我在proc 0上遇到了一个段错误,我正试图找出原因.我认为这段代码可能有点不正统,可以从这里开始.我已经验证了所有my_place_in_storage
值的正确性.
我已经看到了一些方法来检查C中是否存在文件.但是,我见过的所有内容都适用于特定的文件名.我想检查任何匹配特定模式的文件.例如,模式可能是"lockfile*","lockfileA","lockfile.txt"或"lockfile.abc"将在检查中注册.我目前这样做的方法是用opendir()打开目录,然后循环读取readdir()并尝试将模式与返回的每个文件的名称相匹配.它有效,但我确实希望有一种更紧凑的方式来做到这一点.有任何想法吗?
例如,我有一个看起来像的数组
01
23
Run Code Online (Sandbox Code Playgroud)
我想"膨胀"它,以便生成的数组看起来像
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
2 2 2 3 3 3
2 2 2 3 3 3
2 2 2 3 3 3
Run Code Online (Sandbox Code Playgroud)
我玩过tile
各种各样的代表和斧头,但没有什么能给我带来我想要的东西.我可以看到如何使用嵌套循环执行此操作,但我正在寻找一种"pythonic"方法来实现此目的.谁知道怎么样?而顺便说一句,我正在处理的真正问题涉及3D阵列.
相当新的python,非常新的python类.问题有点牵扯.最感谢你的耐心:
我有一个班级"明星".很简单.属性x,v和质量.另一个类Galaxy有一个属性"stars",它只是一个星形对象列表:
class Galaxy:
numstars=0.
stars=[]
def __init__(self,numin,xes,vees,masses):
self.numstars=numin
for n in range(numin):
self.stars.append(Star(xes[n],vees[n],masses[n]))
Run Code Online (Sandbox Code Playgroud)
Galaxy还有一个名为time_stepper的属性函数.我只想说time_stepper只更新"星星"的所有元素,然后返回"星星":
def time_stepper(self,dt):
self.velstep(dt)
self.xstep(dt)
self.velstep(dt)
return(self.stars)
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试驱动这个东西并将"星星"的各种更新存储在名为"历史"的列表中:
gal=Galaxy(#stuff#)
history=[]
for n in range(100):
history.append(gal.time_stepper(.1))
Run Code Online (Sandbox Code Playgroud)
最后,我的问题是:在这个循环的每次迭代中,"星星"的新元素被添加到"历史"中,但是......在这里...... 所有以前的历史元素都被覆盖并给出了与历史的最新元素相同的价值观! 那么发生了什么?我已经遇到过以前我不理解的python列表的事情,但我想我终于把它钉了下来.显然不是.谢谢你的帮助.
附录:感谢大家的帮助.没想到那么多有用的回复,尤其是这么快.我的问题是我假设这两段代码基本相同.第一:
>>> a=[]
>>> b=[1,2,3]
>>> a.append(b)
>>> b=[4,5,6]
>>> a.append(b)
>>> a
[[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
第二:
>>> a=[]
>>> b=[1,2,3]
>>> a.append(b)
>>> b[:]=(4,5,6)
>>> b
[4, 5, 6]
>>> a.append(b)
>>> a
[[4, 5, 6], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
哎呀!他们不是.所以在代码1中,我猜,b是"重新指向"一个全新的内存位置,而[0]继续指向旧b.在第二个中,b处的存储器被"编辑"并且[0]仍然指向该位置.在追加之后,[1]也指向该位置.我现在有吗?
我是python的新手,我仍然在想出"pythonic"的哲学.但对我来说,直接重新分配指针,但是以更复杂的方式完成"深层复制",这与我通常想要做的事情有点相反.任何人都可以开导我吗?再次感谢.
我正在尝试分析MPI/OpenACC Fortran代码.我找到了一个网站,详细说明如何在这里使用MPI运行nvprof .给出的示例适用于OpenMPI.但是,我仅限于MPICH,我无法弄清楚它的等价物.谁知道它会是什么?
这看起来很简单,但我还没有找到一种方法来做到这一点。我有三个列表,a、b 和 c。我想遍历所有这些,就好像它们的元素完全形成一个大列表一样。我可以想到几种方法来做到这一点,但没有什么是非常流畅或“pythonic”的。我希望 splat 操作员能够工作:
for e in (*a, *b, *c):
# do stuff with e
Run Code Online (Sandbox Code Playgroud)
但这会导致语法错误。有任何想法吗?