草庐IT

python - 在纯 NumPy 中重写 for 循环以减少执行时间

我recentlyaskedabouttryingtooptimiseaPythonloopforascientificapplication,并收到anexcellent,smartwayofrecodingitwithinNumPywhichreducedexecutiontimebyafactorofaround100对我来说!但是,B值的计算实际上嵌套在其他几个循环中,因为它是在规则的位置网格中计算的。是否有类似的智能NumPy重写来缩短此过程的时间?我怀疑这部分的性能提升不会很明显,缺点可能是无法向用户报告计算进度,结果无法写入输出文件直到计算结束,并且可能在一个巨大的步骤中

python - Cython numpy 数组形状,元组赋值

我用的成语size_x,size_y,size_z=some_array.shape在处理numpy数组时很常见。当所讨论的数组具有类型时,同样的事情在Cython中似乎不起作用,例如defsomeFunc(np.ndarray[np.float32_t,ndim=2]arr):sx,sy=arr.shape我们最终遇到了这样的编译错误Cannotconvert'npy_intp*'toPythonobject这可能是因为“形状”被转换为C数组(为了更快的访问),所以它不再是一个元组。是否有可能在Cython中以某种方式提取这个元组?(或者我应该坚持使用sx,sy=arr.shape[

python - 如何使用 numpy(和 scipy)查找函数的所有零点?

假设我在a和b之间定义了一个函数f(x)。这个函数可以有很多零点,也可以有很多渐近线。我需要检索此函数的所有零。最好的方法是什么?其实我的策略是这样的:我根据给定的点数评估我的函数我检测是否有符号变化我在改变符号的点之间找到零我验证找到的零是否真的是零,或者这是否是渐近线U=numpy.linspace(a,b,100)#evaluatefunctionat100differentpointsc=f(U)s=numpy.sign(c)foriinrange(100-1):ifs[i]+s[i+1]==0:#opositesignsu=scipy.optimize.brentq(f,U[

python - 比 numpy 的 in1d 掩码函数 : ordered arrays? 做得更好

此操作需要尽可能快地应用于包含数百万个元素的实际数组。这是问题的简单版本。所以,我有一个唯一整数的随机数组(通常有数百万个元素)。totalIDs=[5,4,3,1,2,9,7,6,8...]我有另一个数组(通常是数万个)我可以创建一个掩码的唯一整数。subsampleIDs1=[5,1,9]subsampleIDs2=[3,7,8]subsampleIDs3=[2,6,9]...我可以用numpy来做mask=np.in1d(totalIDs,subsampleIDs,assume_unique=True)然后我可以使用掩码从另一个数组中提取我想要的信息(比如第0列包含我想要的信息)

python - Scipy 稀疏矩阵 - 密集向量乘法性能 - block 与大型矩阵

我有许多scipy稀疏矩阵(目前为CSR格式),我需要将它们与密集的numpy一维向量相乘。该向量称为G:printG.shape,G.dtype(2097152,)complex64每个稀疏矩阵的形状都是(16384,2097152)并且非常稀疏。密度约为4.0e-6。我有一个包含100个稀疏矩阵的列表,称为spmats。我可以像这样轻松地将每个矩阵与G相乘:res=[spmat.dot(G)forspmatinspmats]这会按预期生成形状为(16384,)的密集向量列表。我的应用程序对性能相当关键,所以我尝试了一种替代方法,即首先将所有稀疏矩阵连接成一个大的稀疏矩阵,然后只使用

python - numpy 中没有临时项的外积的非平凡总和

我想解决的实际问题是,给定一组N单位向量和另一组M向量,计算每个单位向量的平均值它与每个M向量的点积的绝对值。本质上,这是计算两个矩阵的外积,然后求和并取中间的绝对值取平均值。对于N和M不是太大,这并不难,有很多方法可以继续(见下文)。问题是当N和M很大时,创建的临时文件很大,并为所提供的方法提供了实际限制。可以在不创建临时对象的情况下完成此计算吗?我遇到的主要困难是由于绝对值的存在。是否存在用于“线程化”此类计算的通用技术?例如考虑以下代码N=7M=5#Createtheunitvectors,justsowehavesomeexamples,#thisisnotmeanttobee

python - 使用索引和值将值添加到 Scipy 稀疏矩阵

我正在研究电力系统分析程序,我需要使用稀疏矩阵。有一个例程,我只使用以下调用填充稀疏矩阵:self.A=bsr_matrix((val,(row,col)),shape=(nele,nbus),dtype=complex)因为这个矩阵不会随时间改变。另一个矩阵确实会随着时间的推移而变化,我需要更新它。有没有办法,例如:co=[2,3,6]row=[5,5,5]val=[0.1+0.1j,0.1-0.2j,0.1-0.4j]我可以将它们添加到先前初始化的稀疏矩阵吗?怎样才是更Pythonic的方式来做到这一点?谢谢 最佳答案 您应该改

python - 如何将 1D numpy 数组分配给 2D numpy 数组?

考虑以下简单示例:X=numpy.zeros([10,4])#2Darrayx=numpy.arange(0,10)#1DarrayX[:,0]=x#WORKSX[:,0:1]=x#returnsERROR:#ValueError:couldnotbroadcastinputarrayfromshape(10)intoshape(10,1)X[:,0:1]=(x.reshape(-1,1))#WORKS有人可以解释为什么numpy的向量形状为(N,)而不是(N,1)吗?从一维数组转换为二维数组的最佳方法是什么?为什么我需要这个?因为我有一个代码将结果x插入二维数组X并且x的大小不时变化

python - 通过 C-API 访问 Numpy Recarray

如果我们有一个Numpyrecarray:x=np.array([(1.,2.)],dtype=np.dtype([('a','我们可以在Python中访问它的字段:x['a']或x['b']但是如果这个数组作为PyArrayObject传递给C程序我们如何访问它的字段?我知道我们可以通过以下方式在C中获取数据类型:PyArray_Descr*dtype=PyArray_DTYPE(arr)PyObject*fields=dtype->fields但是如何使用它来访问x['a']处的数据?? 最佳答案 我会尝试回答我自己的问题。看来

python - numpy polyfit 中使用的权重值是多少,拟合误差是多少

我正在尝试对numpy中的一些数据进行线性拟合。Ex(其中w是该值的样本数,即点(x=0,y=0)我只有1个测量值,该测量值是2.2,但对于(1,1)点,我有2个测量值为3.5。x=np.array([0,1,2,3])y=np.array([2.2,3.5,4.6,5.2])w=np.array([1,2,2,1])z=np.polyfit(x,y,1,w=w)那么,现在的问题是:在这些情况下,在polyfit中使用w=w是否正确,或者我应该使用w=sqrt(w)我应该使用什么?另外,如何从polyfit中获取拟合误差? 最佳答案