草庐IT

python - 优化 numpy 中的内存使用

以下程序使用PyGame加载两个图像,将它们转换为Numpy数组,然后执行一些其他Numpy操作(例如FFT)以发出最终结果(几个数字)。输入可以很大,但在任何时候都应该只有一两个大对象是事件的。一张测试图像大约有1000万像素,灰度化后相当于10MB。它被转换为dtypeuint8的Numpy数组,经过一些处理(应用Hamming窗口)后,它是dtypefloat64的数组。两张图片以这种方式加载到数组中;后面的FFT步骤会生成dtypecomplex128的数组。在添加过多的gc.collect调用之前,程序内存大小往往会随着每一步而增加。此外,似乎大多数Numpy操作都会给出可用

Python 列表/字典与 numpy 数组 : performance vs. 内存控制

我必须反复读取数据文件并将数据存储到(numpy)数组中。我选择将数据存储到“数据字段”字典中:{'field1':array1,'field2':array2,...}。案例1(列表):使用列表(或collections.deque())“附加”新数据数组,代码高效。但是,当我连接存储在列表中的数组时,内存增长并且我没有设法再次释放它。示例:filename='test'#datafilewithamatrixofshape(98,56)nFields=56#InitializedatadictionaryandlistoffieldsdataDict={}#datadirector

python - 给数组切片赋值很慢

我正在尝试通过在Cython中实现来优化Python算法。我的问题是关于以下代码中存在的某个性能瓶颈:@cython.boundscheck(False)#turnoffbounds-checkingforentirefunctiondefanglesToRGB(np.ndarray[double,ndim=2]y,np.ndarray[double,ndim=2]x):cdefdoubleanglecdefdoubleHpcdefdoubleCcdefdoubleXcdefnp.ndarray[double,ndim=3]res=np.zeros([y.shape[0],y.shap

当从未调用 issubclass() 时,Python 在 issubclass() 上抛出 TypeError

我有一段代码在大部分时间都运行得很好,但每隔一段时间我就会在回溯中遇到这个错误:File"/path/to/somefile.py",line272,insomefilesm=-0.5*(wv[0]**2./sm2+numpy.log(2.*numpy.pi*sm2))TypeError:issubclass()arg2mustbeaclassortupleofclasses我知道issubclass()的作用并理解错误,但我从未调用过它;代码中的那一行是纯算术,所以我不知道为什么首先会引发此TypeError。我唯一的理论是Numpy在幕后调用它,但回溯应该显示Numpy源代码中有问

python - 是否可以使用 python 将磁盘上的不连续数据映射到数组?

我想将硬盘上的一个大fortran记录(12G)映射到一个numpy数组。(映射而不是加载以节省内存。)存储在fortranrecord中的数据是不连续的,因为它被记录标记分开了。记录结构为“标记、数据、标记、数据、...、数据、标记”。数据区域和标记的长度是已知的。标记之间的数据长度不是4字节的倍数,否则我可以将每个数据区域映射到一个数组。在memmap中设置offset可以跳过第一个标记,是否可以跳过其他标记并将数据映射到数组?对于可能出现的歧义表达表示歉意,并感谢任何解决方案或建议。5月15日编辑这些是Fortran未格式化的文件。record中存储的数据是一个(1024^3)*

python - 有没有一些优雅的方法来操纵我的 ndarray

我有一个名为xs的矩阵:array([[1,1,1,1,1,0,1,0,0,2,1],[2,1,0,0,0,1,2,1,1,2,2]])现在我想用同一行中最近的前一个元素替换零(假设第一列必须非零。)。粗略的解决方案如下:In[55]:row,col=xs.shapeIn[56]:forrinxrange(row):....:forcinxrange(col):....:ifxs[r,c]==0:....:xs[r,c]=xs[r,c-1]....:In[57]:xsOut[57]:array([[1,1,1,1,1,1,1,1,1,2,1],[2,1,1,1,1,1,2,1,1,2,

python - 使用空间和时间变量在 python(scipy) 中聚类

我的数据集的格式:[x-coordinate,y-coordinate,hour]hour是0到23之间的整数值。我现在的问题是,当我需要坐标的欧几里得距离度量,但小时需要一个不同的度量时,我如何对这些数据进行聚类(因为d(23,0)在欧几里得距离度量中为23)。是否可以为scipy中的每个特征使用不同距离度量的数据进行聚类?如何?谢谢 最佳答案 您需要定义自己的指标,以适当的方式处理“时间”。在scipy.spatial.distance.pdist的文档中你可以定义你自己的函数Y=pdist(X,f)Computesthedis

python - Scipy 退出 : Unexpected behavour. NaN

注意到一些nan意外出现在我的数据中。(并扩展并整理他们触及的一切)做了一些仔细的调查并产生了一个最小的工作示例:>>>importnumpy>>>fromscipy.specialimportexpit>>>expit(709)1.0>>>expit(710)nanExpit是逆逻辑。Scipydocumentationhere.这告诉我们:expit(x)=1/(1+exp(-x))所以1+exp(-709)==1.0这样expit(709)=1.0似乎相当合理,四舍五入exp(-709)==0。但是,expit(710)是怎么回事?expit(710)==nan意味着1+exp(

python - 点集之间的成对位移向量

我有一个N点的数组,d维度(N,d)我想创建一个新的数组每对(Nchoose2,d)的所有位移向量。如果我只想要这些向量的大小,我可以使用pdist来自scipy.spatial.distance.如果我能做到就好了pdist(points,lambdau,v:u-v)但是metric函数必须返回一个标量(ValueError:用序列设置数组元素。)我的解决方案是使用np.triu_indices:i,j=np.triu_indices(len(points),1)displacements=points[i]-points[j]这比使用pdist慢了大约20-30倍(我通过取disp

python - 从 numpy 数组中删除多个切片

我有一个给定的numpy数组和一个包含多个切片对象的列表(或者包含(start,end)元组)。我希望从原始数组中删除切片对象位置,并获得具有剩余值的第二个数组。玩具示例:myarray=np.arange(20)array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])mylist=(slice(2,4),slice(15,19))做某事,结果应该是array([0,1,5,6,7,8,9,10,11,12,13,14])数组可以是几十万大,切片对象列表可以包含几千个元素,我需要经常运行操作,所以速度有点重要。据我所知,Num