我已经运行了一段时间的特定python脚本。在此之前的几个月中,所有脚本都运行良好(包括在Jupyter中)。现在,以某种方式,我系统中的jupyter已开始在代码的特定行(下面提到的代码的最后一行)显示以下错误消息。除了代码的最后一行(我在其中调用用户定义的函数进行配对计数)之外,代码的所有部分都运行正常。用户定义的函数(correlation.polepy)可以从https://github.com/OMGitsHongyu/N-body-analysis找到
这是我收到的错误消息:
Kernel Restarting
The kernel appears to have died. It will restart automatically.
Run Code Online (Sandbox Code Playgroud)
而且,这是我的Python代码的框架:
from __future__ import division
import numpy as np
import correlation
from scipy.spatial import cKDTree
File1 = np.loadtxt('/Users/Sidd/Research/fname1.txt')
File2 = np.loadtxt('/Users/Sidd/Research/fname2.txt')
masscut = 1.1*np.power(10,13)
mark1 = (np.where(File1[:,0]>masscut))[0]
mark2 = (np.where(File2[:,0]>masscut))[0]
Data1 = File1[mark1,1:8]
Data2 = File2[mark2,1:8]
Xi_masscut = correlation.polepy(p1=Data1, p2=Data2, rlim=150, nbins=150, nhocells=100, blen=1024, dis_f=100)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用IPython时,也会发生类似的问题(代码的最后一行)。当我尝试使用Python(终端中的实现)时,我收到一条错误消息(在最后一行),该消息显示“ Segmentation fault:11 ”。我正在使用Python 2.7.13 :: Anaconda 2.5.0(x86_64)。
我已经尝试以下方法来寻找解决方案:
1.>我检查了stackoverflow上的一些以前的链接,这些链接被问到了:内核似乎已经死亡。它将自动重启
我尝试了上面链接中给出的解决方案;可悲的是,这似乎不适用于我的情况。这是上面给出的链接中提到的解决方案:
conda update mkl
Run Code Online (Sandbox Code Playgroud)
2.> …
我试图用靠近相关单元格的矩阵单元格值的平均值(即值低于阈值的单元格)替换 numpy 矩阵中低于某个阈值的值。
作为一个例子,让我们考虑这个 10*10 矩阵(比如matrx):
matrx = np.array([[1,4,9,2,2,5,1,1,9,1],[2,4,3,5,2,2,1,2,1,1],
[3,4,-2,-3,4,2,3,5,1,2],[2,3,-3,-5,3,3,7,8,-4,1],[3,4,2,3,4,2,3,7,3,2],
[1,4,9,3,4,3,3,2,9,4],[2,1,3,5,2,2,3,2,3,3],
[3,6,8,3,7,2,3,5,3,2],[5,-2,-3,5,2,3,7,8,4,3],[4,-2,-3,1,1,2,3,7,3,5]])
print matrx
[[ 1 4 9 2 2 5 1 1 9 1]
[ 2 4 3 5 2 2 1 2 1 1]
[ 3 4 -2 -3 4 2 3 5 1 2]
[ 2 3 -3 -5 3 3 7 8 -4 1]
[ 3 4 2 3 4 2 3 7 3 2]
[ 1 4 9 3 4 3 3 2 …Run Code Online (Sandbox Code Playgroud) 我有一个 Python 字典(比如D),其中每个键对应于一些预定义的列表。我想创建一个具有两列的数组,其中第一列对应于字典 D 的键,第二列对应于相应列表中元素的总和。举个例子,如果,
D = {1: [5,55], 2: [25,512], 3: [2, 18]}
Run Code Online (Sandbox Code Playgroud)
然后,我希望创建的数组应该是,
A = array( [[1,60], [2,537], [3, 20]] )
Run Code Online (Sandbox Code Playgroud)
我在这里给出了一个小例子,但我想知道一种实现速度最快的方法。目前,我正在使用以下方法:
A_List = map( lambda x: [x,sum(D[x])] , D.keys() )
Run Code Online (Sandbox Code Playgroud)
我意识到我的方法的输出是列表的形式。我可以在另一个步骤中将其转换为数组,但我不知道这是否是一种快速方法(我认为使用数组会比使用列表更快)。我将非常感谢您的回答,让我知道实现这一目标的最快方法是什么。
我想以这样的方式比较两个Python列表,'A'和'B',我可以找到A中与B中相同数字对应的所有元素.我想为B中的每个数字执行此操作.例如,如果
A = [5, 7, 9, 12, 8, 16, 25]
B = [2, 1, 3, 2, 3, 1, 4]
Run Code Online (Sandbox Code Playgroud)
我想得到
[7,16] corresponding to the number 1 of listB
[5, 12] corresponding to the number 2 of listB
[9, 8] corresponding to the number 3 of listB
[25] corresponding to the number 4 of listB
Run Code Online (Sandbox Code Playgroud)
A和B将始终具有相同的长度.
在python中,我有一个形状为n*2的数组(其中n是一个正整数).从本质上讲,这是一对数组.我希望删除此阵列中的所有镜像对.例如,以下阵列A 的形状为10*2.所述双[0,55]和[55,0]将构成一个这样的反射镜对中A,和我想保留一个出这两个的.
A = np.array([[ 0, 55], [ 5, 25], [12, 62], [27, 32], [25, 73],
[55, 0], [25, 5], [62, 12], [32, 27], [99, 95]])
Run Code Online (Sandbox Code Playgroud)
对于前面提到的示例,我希望结果数组看起来像:
B = np.array([[ 0, 55], [ 5, 25], [12, 62], [27, 32], [25, 73], [99,95])
Run Code Online (Sandbox Code Playgroud)
因为有6对独特的对(不包括4对镜像对).
我意识到我可以使用两个嵌套的for循环来实现这一点,但我希望使用最快的方法实现这一点,因为对于手头的实际问题,我将处理大型数组.我会很感激能得到一些帮助.
我正在编写一个简单的 python 脚本来测试 mpi4py。具体来说,我想从给定处理器(例如rank 0)广播标量和数组,以便所有其他处理器都可以在后续步骤中访问广播标量和数组的值。
这就是我到目前为止所做的:
from __future__ import division
from mpi4py import MPI
import numpy as np
comm = MPI.COMM_WORLD
nproc = comm.Get_size()
rank = comm.Get_rank()
if rank==0:
scal = 55.0
mat = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr = np.ones(5)
result = 2*arr
comm.bcast([ result , MPI.DOUBLE], root=0)
comm.bcast( scal, root=0)
comm.bcast([ mat , MPI.DOUBLE], root=0)
for proc in range(1, 3):
if (rank == proc):
print "Rank: ", rank, ". Array is: ", result
print "Rank: ", rank, ". Scalar …Run Code Online (Sandbox Code Playgroud) 我编写了一个简单的测试程序来尝试子程序和Fortran中的调用语句.我在GNU/Linux中使用gfortran编译器.我已经声明了14个参数,这些参数在我的代码中相应编号.当我尝试通过调用语句传递其中的11个参数时,我的代码完全正常工作,当我尝试包含第12个参数并尝试通过调用语句传递12个参数时,遇到一个相当奇怪的"语法错误".问题可能是什么,我该如何解决?这是我正在讨论的程序
`
program test
IMPLICIT REAL*4(A-B,D-H,O-Z)
IMPLICIT COMPLEX(C)
COMPLEX*16 CQC,CQV
parameter k1=2
parameter k2=2
parameter k3=2
parameter k4=2
parameter k5=2
parameter k6=2
parameter k7=2
parameter k8=2
parameter k9=2
parameter k10=2
parameter k11=2
parameter k12=2
parameter k13=2
parameter k14=2
call bins(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12)
end program
subroutine bins(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12)
integer k1, k2, k3, k4, k5
end subroutine `
Run Code Online (Sandbox Code Playgroud)
以下是我在'call'语句中包含k12然后编译它时得到的错误:
`
siddharth@siddharth-VBox:~/Desktop/Codes$ gfortran test6.for …Run Code Online (Sandbox Code Playgroud) 我正在使用一个非常基本的 python 代码(文件名:)test_mpi.py来尝试使用 mpi4py 在 python 中进行并行编程。我想做的是拥有一个所有条目都为零的二维 numpy 数组。然后使用集群中的特定处理器来增加 numpy 数组的特定元素的值。
具体来说,我有一个 3*3 numpy 矩阵 ( mat),其中所有元素均为零。当我的代码完成运行(跨多个处理器)后,我希望矩阵如下所示:
mat = [[ 1. 2. 3.]
[ 4. 5. 6.]
[ 7. 8. 9.]]
Run Code Online (Sandbox Code Playgroud)
这是一个相当简单的任务,我希望我的代码在几分钟内完成运行(如果不是更短的时间)。我的代码持续运行很长时间并且不会停止执行(最终我必须在几个小时后删除该作业。)
这是我的代码:
from __future__ import division
from mpi4py import MPI
import os
import time
import numpy as np
comm = MPI.COMM_WORLD
nproc = comm.Get_size()
rank = comm.Get_rank()
start_time = time.time()
mat = np.zeros((3,3))
comm.bcast([ mat , MPI.DOUBLE], root=0)
for proc in range(1, nproc):
if rank == …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种以以下方式在python中合并两个numpy数组的快速方法。例如,如果我有以下两个数组,
arr1 = np.array([0.0, 1.0, 11.0, 111.0])
arr2 = np.array([0.5, 1.5, 11.5, 111.5])
Run Code Online (Sandbox Code Playgroud)
那么我希望合并后的数组(例如arr3)包含arr1和arr2在交替索引中的元素。喜欢,
arr3 = np.array([0.0, 0.5, 1.0, 1.5, 11.0, 11.5, 111.0, 111.5])
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使用两个for循环来实现这一点,在其中我可以将arr1和的元素存储在arr2(of arr3)的备用索引中。但是,在我的实际工作中,我将处理庞大的数组(arr1和arr2),并且我想确保自己使用的是高效且快速的方法来实现此功能(即创建arr3)
我将不胜感激任何帮助。