我尝试使用scipy.stats模式来查找最常见的值。但是,我的矩阵包含很多零,因此这始终是模式。
例如,如果我的矩阵如下所示:
array = np.array([[0, 0, 3, 2, 0, 0],
[5, 2, 1, 2, 6, 7],
[0, 0, 2, 4, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
我想得到2退货的价值。
我想优化泵存储工厂的时间表.基本上有96个已知价格(当天的每个季度),模型应决定是否(1)泵,(2)涡轮机或(3)每个季度都不做任何事情.因此,X:-100有一些界限
首先,我尝试了以下内容:
from scipy.optimize import minimize
import numpy as np
prices=np.array([[1.5,50,30]])
xp =np.array([[1.5,50,30]])
fun = lambda x: xp* prices #here xp and prices should be matrices
cons = ({'type': 'ineq', 'fun': lambda x: (xp*0.25)<=500},
{'type': 'ineq', 'fun': lambda x: (xp*0.25)>=0})
bnds = ((0, None), (0, None), (0, None))
res = minimize(fun, (2, 0,0), method='SLSQP', bounds=bnds, constraints=cons)
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-17-15c05e084977> in <module>()
10 bnds = ((0, None), (0, None), (0, None))
11
---> 12 res …Run Code Online (Sandbox Code Playgroud) 在项目Euler解决问题(剧透)中,这对我来说是一个问题:
Python2.7.10/0.13.0b1: scipy.misc.comb(40,20) -> array(137846528819.9994)
Python3.5.0/scipy 0.16.0: scipy.misc.comb(40,20) -> 137846528820.00006
令人沮丧的是,我了解到我必须round()在结果上调用函数,而不是直接转换为int()使用math.floor()/ math.ceil()用于Python 2/3的一致性.
导致两个Python/SciPy版本之间出现这种差异的原因是什么?
有没有理由SciPy开发人员不只是首先调用round()返回的结果scipy.misc.comb()?
我一直试图绘制一条线,以及样条拟合.以下是我的代码的通用版本.'x_coord'和'y_coord'是包含浮点值列表的列表.
import matplotlib.pyplot as plt
from scipy import interpolate as ipl
for a in range(len(x_coord)):
plt.plot(x_coord[a],y_coord[a],label='Label')
yinterp = ipl.UnivariateSpline(x_coord[a],y_coord[a],s=1e4)(x_coord[a])
plt.plot(x_coord[a],yinterp,label='Spline Fit')
Run Code Online (Sandbox Code Playgroud)
虽然我认为这在过去对我有用,但现在我收到一条错误消息:
/.../Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/interpolate/fitpack2.pyc in __init__(self, x, y, w, bbox, k, s, ext)
165
166 data = dfitpack.fpcurf0(x,y,k,w=w,
--> 167 xb=bbox[0],xe=bbox[1],s=s)
168 if data[-1] == 1:
169 # nest too small, setting to maximum bound
error: (m>k) failed for hidden m: fpcurf0:m=0
Run Code Online (Sandbox Code Playgroud)
我已经看到类似错误消息的情况(例如dfitpack.error:(m> k)因隐藏的m:fpcurf0:m = 1而失败),只是在那种特殊情况下似乎存在涉及字典的问题,其中没有一个用于我的代码.
关于这个问题的任何建议将不胜感激.
我有两个一维数组,我想做一些线性回归.我用了:
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
Run Code Online (Sandbox Code Playgroud)
但是斜率和截距总是NAN,NAN.我读了一点,我发现如果x或y有一些NAN,那就是预期的结果.我试过这个 解决方案,但它不起作用,因为在我的情况下,只有y包含一些NAN; 不是x.所以使用该解决方案,我有错误:
ValueError: all the input array dimensions except for the concatenation axis must match exactly.
我该如何解决这个问题?
我正在尝试适合形式的功能:
其中A和B是固定常数.在scipy中,我通常(我认为合理规范)解决此类问题的方法如下:
def func(t, coefs):
phase = np.poly1d(coefs)(t)
return A * np.cos(phase) + B
def fit(time, data, guess_coefs):
residuals = lambda p: func(time, p) - data
fit_coefs = scipy.optimize.leastsq(residuals, guess_coefs)
return fit_coefs
Run Code Online (Sandbox Code Playgroud)
这项工作正常,但我想提供一个分析雅可比行列式来改善收敛性.从而:
def jacobian(t, coefs):
phase = np.poly1d(coefs, t)
the_jacobian = []
for i in np.arange(len(coefs)):
the_jac.append(-A*np.sin(phase)*(t**i))
return the_jac
def fit(time, data, guess_coefs):
residuals = lambda p: func(time, p) - data
jac = lambda p: jacobian(time, p)
fit_coefs = scipy.optimize.leastsq(residuals, guess_coefs,
Dfun=jac, col_deriv=True)
Run Code Online (Sandbox Code Playgroud)
即使订单为2或更低,这也不会起作用.使用optimize.check_gradient()快速检查也不会产生积极的结果.
我几乎可以肯定Jacobian和代码是正确的(虽然请纠正我)并且问题更为基础:雅各比派中的t**i术语会导致溢出错误.这在函数本身中不是问题,因为这里单项式项乘以它们非常小的系数.
我的问题是:
我对函数的实现很感兴趣mvncdf,(http://cn.mathworks.com/help/stats/mvncdf.html).
具体来说,我想知道它传递一个数组并返回一个数组的实现.我想知道它是否以有效的方式完成.因为我正在使用numpy,而且没有对应的numpy.
我使用以下脚本在一些(x,y,z)数据上使用LinearNDInterpolator。但是,我不知道如何从插值数据转到以热图形式绘制/显示插值?我是否缺少基于x和y的最小值和最大值设置网格网格的内容?任何帮助或示例都很好!
import numpy as np
import scipy.interpolate
x = np.array([-4386795.73911443, -1239996.25110694, -3974316.43669208,
1560260.49911342, 4977361.53694849, -1996458.01768192,
5888021.46423068, 2969439.36068243, 562498.56468588,
4940040.00457585])
y = np.array([ -572081.11495993, -5663387.07621326, 3841976.34982795,
3761230.61316845, -942281.80271223, 5414546.28275767,
1320445.40098735, -4234503.89305636, 4621185.12249923,
1172328.8107458 ])
z = np.array([ 4579159.6898615 , 2649940.2481702 , 3171358.81564312,
4892740.54647532, 3862475.79651847, 2707177.605241 ,
2059175.83411223, 3720138.47529587, 4345385.04025412,
3847493.83999694])
# Create coordinate pairs
cartcoord = zip(x, y)
# Interpolate
interp = scipy.interpolate.LinearNDInterpolator(cartcoord, z)
Run Code Online (Sandbox Code Playgroud)
编辑:基于@Spinor的解决方案,并使用Python 2.7,以下代码为我提供了我正在寻找的方法(方法1)。有没有办法增加插值点的密度?
不用说,我没想到结果是圆形的,因为(纬度,经度)坐标取自等角投影图。在进一步调查中,我认为这只是映射到不同的投影上。
申请时,rad2deg我得到
>>> np.rad2deg(4*np.pi)
720.0
Run Code Online (Sandbox Code Playgroud)
的角度720.0度是在应用等同于角许多360.0度.
将弧度(从dtype=float64)转换为结果为正确值的度数的最佳方法是[0,180]什么?
我想绘制npts随机变量,以高斯分布,均值μ和色散sigma.我知道如何在Numpy中做到这一点:
x = np.random.normal(loc=mu, scale=sigma, size=npts)
print(np.std(x), np.mean(x))
0.1998, 0.3997
Run Code Online (Sandbox Code Playgroud)
这也应该可以通过逆变换使用scipy.special.erfinv,从均匀分布开始:
u = np.random.uniform(0, 1, npts)
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何正确缩放比例.有没有人这样做过?