Questions tagged «numpy»

5
在numpy中就地置换矩阵
我想通过使用python的numpy库更改其若干行和列的顺序来就地修改密集的正方形转换矩阵。从数学上讲,这对应于将矩阵乘以置换矩阵P并将其乘以P ^ -1 = P ^ T,但这并不是计算合理的解决方案。 现在,我正在手动交换行和列,但是我希望numpy有一个不错的函数f(M,v),其中M具有n行和列,而v具有n项,以便f(M,v)更新M根据索引排列v。也许我只是在搜索互联网上失败了。 numpy的“高级索引”可能会发生这种情况,但是我的理解是这样的解决方案不会就位。同样,对于某些简单情况,仅跟踪索引排列可能就足够了,但是在我的情况下这并不方便。 补充: 有时当人们谈论排列时,它们仅表示对随机排列进行采样,例如,这是在统计中获取p值的过程的一部分。或者,它们的意思是计数或枚举所有可能的排列。我不是在谈论这些事情。 补充: 矩阵足够小以适合桌面RAM,但又足够大,我不想深思熟虑地复制它。实际上,我想使用尽可能大的矩阵,但我不想处理无法将其保存在RAM中的不便,并且我会对矩阵执行O(N ^ 3)LAPACK运算,这也会限制实际矩阵的大小。我目前不必要地复制这么大的矩阵,但我希望可以很容易地避免这种排列的情况。

1
Python / Numpy数组运算的性能如何随着数组尺寸的增加而缩放?
Python / Numpy数组如何随着数组尺寸的增加而缩放? 这是基于我在对这个问题进行Python代码基准测试时发现的一些行为:如何使用numpy slices表达这种复杂的表达式 问题主要涉及索引以填充数组。我发现在Python循环上使用(不太好)Cython和Numpy版本的优势因涉及的数组大小而异。Numpy和Cython都在一定程度上提高了性能优势(在我的笔记本电脑上,Cython 大约为,Numpy 大约为N = 2000),之后它们的优势下降了(Cython功能仍然是最快的)。N=500N=500N=500N=2000N=2000N=2000 是否定义了此硬件?在处理大型阵列方面,对于那些对性能表现满意的代码,应该遵循哪些最佳实践? 这个问题(为什么我的矩阵向量乘法缩放不为什么?)可能是相关的,但是我有兴趣了解更多有关Python处理数组的不同方式如何相对缩放的信息。

1
在谐波振荡器的情况下,为什么SciPy eigsh()会产生错误的特征值?
我正在开发一些更大的代码,以在计算物理学的背景下执行巨大的稀疏矩阵的特征值计算。由于特征值在分析上是众所周知的,因此我在一维上针对简单的谐波振荡器测试了例程。这样做并将我自己的例程与SciPy的内置求解器进行比较,我遇到了下图中显示的异常情况。在这里可以看到第一个100个数值地计算本征值和分析本征值λ 一个Ñ 一个λñ ü 米λñü米\lambda_{num}λ一个ñ 一λ一种ñ一种\lambda_{ana} 在特征值40附近,数值结果开始与分析结果有所不同。这并不令我感到惊讶(除非在讨论中提到,否则我不会在这里解释原因)。但是,令我惊讶的是eigsh()会生成简并的特征值(大约特征值80)。为什么即使很少的特征值,eigsh()的行为也是如此? import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = 10. accuracy = 1e-5 #stepsize h = (xmax - xmin) / (N + 1.) #exclude first and …

3
如何使用numpy slices表达这种复杂的表达式
我希望在Python中实现以下表达式: 其中和是大小为 numpy数组,是一个大小为的numpy数组。大小可能最大约为10000,并且该函数是内部循环的一部分,该循环将被多次评估,因此速度非常重要。X一世= ∑j = 1i − 1ķ我- Ĵ ,Ĵ一种一世 − j一种Ĵ,X一世=∑Ĵ=1个一世-1个ķ一世-Ĵ,Ĵ一种一世-Ĵ一种Ĵ, x_i = \sum_{j=1}^{i-1}k_{i-j,j}a_{i-j}a_j, XXxÿÿyññnķķkn × nñ×ñn\times nññn 理想情况下,我希望完全避免for循环,尽管我想如果有一个循环就不是世界末日了。问题是我很难在没有几个嵌套循环的情况下查看如何做到这一点,这可能会使它变得很慢。 有人可以看到如何使用numpy高效且容易理解的方式表达上述方程吗?更一般而言,解决此类问题的最佳方法是什么?
14 python  numpy 

1
具有牛顿法的有限差分的近似雅可比方程会引起不稳定性吗?
我已经在python 3中实现了向后欧拉求解器(使用numpy)。为了我自己的方便和练习,我还编写了一个小函数来计算梯度的有限差分近似值,这样我就不必总是解析地确定雅可比矩阵(如果可能的话!)。 使用Ascher和Petzold 1998中提供的描述,我编写了此函数来确定给定点x处的梯度: def jacobian(f,x,d=4): '''computes the gradient (Jacobian) at a point for a multivariate function. f: function for which the gradient is to be computed x: position vector of the point for which the gradient is to be computed d: parameter to determine perturbation value eps, where eps …

2
numpy中矩阵求逆的复杂性
我正在解决需要对稠密平方矩阵求逆的微分方程。这种矩阵求反消耗了我的大部分计算时间,所以我想知道我是否正在使用最快的算法。 我当前的选择是numpy.linalg.inv。从我的数字中,我看到它的缩放比例为,其中n是行数,因此该方法似乎是高斯消除法。Ø (ñ3)Ø(ñ3)O(n^3) 根据维基百科,有更快的算法可用。有谁知道是否有一个实现这些的库? 我想知道,为什么不用numpy使用这些更快的算法?

4
部分奇异值分解(SVD)的内存有效实现
为了简化模型,我想计算与矩阵最大20个奇异值相关的左奇异矢量,其中和。不幸的是,我的矩阵将是稠密的,没有任何结构。 Ñ ≈ 10 6 ķ ≈ 10 3甲A∈RN,kA∈RN,kA \in \mathbb R^{N,k}N≈106N≈106N\approx 10^6k≈103k≈103k\approx 10^3AAA 如果我只是svd从numpy.linalgPython模块中的例程中调用该大小的随机矩阵,则会遇到内存错误。这是由于的分配用于分解。甲= V 小号ùV∈RN,NV∈RN,NV\in \mathbb R^{N,N}A=VSUA=VSüA = VSU 周围有避免这种陷阱的算法吗?例如,通过仅建立与非零奇异值关联的奇异矢量。 我准备在计算时间和准确性上进行交易。

1
超导体建模曲线的数值积分(Python)
我是一位试图对超导体-超导体结的电流-电压特性进行建模的物理学家。 该模型的等式为: 一世(五)=1个Ë[Rn − n∫∞- ∞| Ë|[Ë2-Δ21个]1 / 2| Ë+ e V|[ (E+ e V)2-Δ22]1 / 2[ f(E)− f(E+ e V)]d E一世(V)=1个Ë[Rñ-ñ∫-∞∞|Ë|[Ë2-Δ1个2]1个/2|Ë+ËV|[(Ë+ËV)2-Δ22]1个/2[F(Ë)-F(Ë+ËV)]dË\begin{align} I(V) = \frac{1}{eR_{\mathrm{n-n}}}\int_{-\infty}^{\infty}\frac{|E|}{[E^{2} - \Delta_{1}^{2}]^{1/2}}\frac{|E + eV|}{[(E + eV)^{2} - \Delta_{2}^{2}]^{1/2}}[f(E) - f(E + eV)]\,\mathrm{d}E \end{align} 通过评估给定电压(或代码中)的积分来计算电流值(或代码中)。一世一世IIVVVv 我已经在Python中尝试过了。代码如下所示。 from scipy import integrate from numpy import * import pylab …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.