我正在阅读PEP 0008(样式指南),我注意到它建议使用self作为实例方法中的第一个参数,但cls是类方法中的第一个参数.
我已经使用并编写了几个类,但我从未遇到过类方法(嗯,一个将cls作为参数传递的方法).有人能告诉我一些例子吗?
谢谢!
我只是想知道是否有一种特殊的pythonic方式添加两个元组元素?
到目前为止(a和b是元组),我有
map(sum, zip(a, b))
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
(a[0] + b[0], a[1] + b[1], ...)
Run Code Online (Sandbox Code Playgroud)
并且可能的重量是给予0.5重量和b 0.5重量,或者等等.(我试图加权平均值).
哪个工作正常,但说我想增加一个权重,我不太确定我会怎么做.
谢谢
所以我正在尝试numpy,我在rollaxis方法中遇到了一个奇怪的(?)行为.
In [81]: a = np.ones((4, 3, 2))
In [82]: a.shape
Out[82]: (4, 3, 2)
In [83]: x = np.rollaxis(a, 2)
In [84]: x.shape
Out[84]: (2, 4, 3)
In [85]: np.rollaxis(x, -2).shape
Out[85]: (4, 2, 3)
Run Code Online (Sandbox Code Playgroud)
-2不应该反转rolrolis?我要做的是应用一个只能在2坐标第一时应用的矩阵.但后来我想把我的阵列恢复原状.我发现工作的唯一的事情是申请np.rollaxis(x, 2)
两次,或申请np.rollaxis(x, 0, start=3)
.我只是通过猜测发现了这些,我不知道它们为什么会起作用.他们似乎也模糊了我真正想做的事情.有人可以解释一下我应该"扭转"滚动的方式,或者我做错了什么?
(有这样的pythonic方法吗?)
当我尝试在MATLAB中计算第75个百分点时,我得到的值与NumPy中的值不同.
MATLAB:
>> x = [ 11.308 ; 7.2896; 7.548 ; 11.325 ; 5.7822; 9.6343;
7.7117; 7.3341; 10.398 ; 6.9675; 10.607 ; 13.125 ;
7.819 ; 8.649 ; 8.3106; 12.129 ; 12.406 ; 10.935 ;
12.544 ; 8.177 ]
>> prctile(x, 75)
ans =
11.3165
Run Code Online (Sandbox Code Playgroud)
Python + NumPy:
>>> import numpy as np
>>> x = np.array([ 11.308 , 7.2896, 7.548 , 11.325 , 5.7822, 9.6343,
7.7117, 7.3341, 10.398 , 6.9675, 10.607 , 13.125 ,
7.819 , 8.649 , 8.3106, …
Run Code Online (Sandbox Code Playgroud) (我试过看,但所有其他答案似乎都在使用urllib2)
我刚刚开始尝试使用请求,但我仍然不太清楚如何从页面发送或请求其他内容.例如,我会的
import requests
r = requests.get('http://google.com')
Run Code Online (Sandbox Code Playgroud)
但我不知道现在怎么做,例如,使用提供的搜索栏进行谷歌搜索.我已经阅读了快速入门指南,但我对HTML POST等不是很熟悉,所以它并没有太大帮助.
有什么干净而优雅的方式来做我要问的事吗?
当我尝试OLS适合这两个库时,我得到不同的r ^ 2值(确定系数),我无法弄清楚原因.(为方便起见,删除了一些间距)
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: import statsmodels.api as sm
In [4]: import scipy.stats
In [5]: np.random.seed(100)
In [6]: x = np.linspace(0, 10, 100) + 5*np.random.randn(100)
In [7]: y = np.arange(100)
In [8]: slope, intercept, r, p, std_err = scipy.stats.linregress(x, y)
In [9]: r**2
Out[9]: 0.22045988449873671
In [10]: model = sm.OLS(y, x)
In [11]: est = model.fit()
In [12]: est.rsquared
Out[12]: 0.5327910685035413
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我想不出来!某处有错误吗?
In [49]: timeit.timeit("np.exp(100)", setup="import numpy as np")
Out[49]: 1.700455904006958
In [50]: timeit.timeit("np.e**100", setup="import numpy as np")
Out[50]: 0.16629505157470703
Run Code Online (Sandbox Code Playgroud)
是否有任何理由使用np.e**100的CPython实现比使用numpy版本慢得多?numpy版本不应该更快,因为它被推到C代码?
所以我有两个pandas时间序列,两者的索引都是时间戳.问题是 - 并非所有时间戳都存在于两个时间序列中.我想对匹配的点执行线性回归,忽略那些没有"对"的点
这是我目前的解决方案,但它似乎有点冗长和丑陋:
indexes_used = sorted(list(set(series1).intersection(series2)))
perform_regression(series1.loc[indexes_used], series2.loc[indexes_used])
Run Code Online (Sandbox Code Playgroud)
或者,我正在考虑做(但创建临时数据帧似乎是多余的):
temp_frame = pd.concat([series1, series2]).T.dropna() #need the transpose to keep timestamps on vertical axis
perform_regression(blabla)
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我不明白下面的行为.numpy数组通常可以通过索引来访问,所以[:,1]应该等同于[:] [1],或者我认为.有人可以解释为什么不是这样吗?
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:,1]
array([2, 5])
>>> a[:][1]
array([4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
谢谢!
python ×9
numpy ×4
matlab ×1
optimization ×1
pandas ×1
percentile ×1
r ×1
scipy ×1
statistics ×1
statsmodels ×1
tuples ×1