我想了解当使用Numba来加速numpyfor循环中的纯代码时,收益来自哪里.是否有任何分析工具可以让您查看jitted功能?
演示代码(如下所示)只是使用非常基本的矩阵乘法来为计算机提供工作.观察到的收益来自:
loop,numpy截获的函数jit,或者jitnumpy外包通过包装函数执行到低级库的开销较少LINPACK%matplotlib inline
import numpy as np
from numba import jit
import pandas as pd
#Dimensions of Matrices
i = 100
j = 100
def pure_python(N,i,j):
for n in range(N):
a = np.random.rand(i,j)
b = np.random.rand(i,j)
c = np.dot(a,b)
@jit(nopython=True)
def jit_python(N,i,j):
for n in range(N):
a = np.random.rand(i,j)
b = np.random.rand(i,j)
c = np.dot(a,b)
time_python = []
time_jit = []
N = [1,10,100,500,1000,2000] …Run Code Online (Sandbox Code Playgroud) 我感兴趣的是一个在程序中用作引用表的Immutable DataFrame,在最初构造之后强制执行read_only属性(在我的情况下是在类def __init__()方法中).
我看到索引对象已冻结.
有没有办法使整个DataFrame不可变?
我正在构建一个用于处理非常具体的结构化数据的库,我正在Pandas之上构建我的基础架构.目前,我正在为不同的用例编写一堆不同的数据容器,例如CTMatrix for Country x Time Data等,以容纳适用于所有CountryxTime结构化数据的方法.
我目前正在辩论
选项1:对象继承
class CTMatrix(pd.DataFrame):
methods etc. here
Run Code Online (Sandbox Code Playgroud)
或选项2:对象使用
class CTMatrix(object):
_data = pd.DataFrame
then use getter, setter methods to control access to _data etc.
Run Code Online (Sandbox Code Playgroud)
从软件工程的角度来看,这里有一个明显的选择吗?
到目前为止我的想法是:
选项1:
CTmatrix.sort())上使用DataFrame方法,而不必通过_dataOption#2中封装对象上的方法支持它们但
__init__()必须将属性传递给超类super(MyDF, self).__init__(*args, **kw) 选项2:
但
CTMatrix.data.sort())在选项#1中采用这种方法是否还有其他缺点?
我试图按另一个按特定顺序排序的系列对DataFrame(axis = 0)进行排序.
示例:DataFrame包含CountryCodes的索引:'AUS','BWA'....(按字母顺序排序)系列包含CountryCodes列表及其相关GDP(按GDP排序)
我可以使用DataFrame.join(系列)没问题,然后对列'GDP'进行排序,然后对del DF ['GDP']进行排序,但有没有一种方法可以直接执行此操作而无需加入结构?
对于 Pandas:df.merge()方法,是他们获取合并摘要统计信息(例如匹配数、不匹配数等)的便捷方法。我知道这些统计数据取决于标志how='inner',但是知道使用内部联接等时“丢弃”了多少内容会很方便。我可以简单地使用:
df = df_left.merge(df_right, on='common_column', how='inner')
set1 = set(df_left[common_column].unique())
set2 = set(df_right[common_column].unique())
set1.issubset(set2) #True No Further Analysis Required
set2.issubset(set1) #False
num_shared = len(set2.intersection(set1))
num_diff = len(set2.difference(set1))
# And So on ...
Run Code Online (Sandbox Code Playgroud)
但认为这可能已经实施了。我是否错过了它(即类似report=True会返回的合并new_dataframe以及报告系列或数据框)
是否有一种方法,例如使用铸造的包(https://github.com/gpoore/minted),将语法高亮显示的IPython会话集成到乳胶文档中?
我已经看到了许多使用nbconvert将笔记本转换为tex文件的方法。但是,我不想在笔记本环境中编写整个文档。但是,我想将IPython示例纳入我的论文中。
就像是:
\begin{minted}{ipython ....}
IN[1]: import pandas as pd
...
\end{minted}
Run Code Online (Sandbox Code Playgroud) 使用以下内容:
class test:
def __init__(self):
self._x = 2
def __str__(self):
return str(self._x)
def __call__(self):
return self._x
Run Code Online (Sandbox Code Playgroud)
然后用.创建一个实例 t = test()
我看到如何__str__用于打印:
>>> print t
2
Run Code Online (Sandbox Code Playgroud)
我可以看到如何使用可调用的对象 __call__
>>> t()
2
Run Code Online (Sandbox Code Playgroud)
但是如何让对象返回一个内部属性,以便在输入时:
>>> t
2
Run Code Online (Sandbox Code Playgroud)
代替:
<__main__.test instance at 0x000000000ABC6108>
Run Code Online (Sandbox Code Playgroud)
以类似的方式Pandas打印出DataFrame对象.
我正在尝试使用pycountries库将国家/地区名称数据列表转换为ISO3166国家/地区代码(alpha3).我的基本功能如下:
import pycountries as pc
def guess_country(data, output='alpha3', verbose=False):
#Check Data isn't already in Alpha3
try:
country = pc.countries.get(alpha3=data)
return country
except:
pass #KeyError Raised, data doesn't directly match
#Check if Country is Actual CountryName
try:
country = pc.countries.get(name=data)
return country
except:
pass #KeyError Raised, data doesn't directly match
#Check RegExpr of 'data' in an attempt to match
Run Code Online (Sandbox Code Playgroud)
问题是CountryName数据相当脏......一个简短的样本列表
GUATMAL,CHINA T,COLOMB,MEXICO,HG KONG
有没有人知道在给定cntry_name的情况下是否有一个包返回最佳"猜测"匹配?我会很高兴有些人因困难而被拒绝(即中国T - >台湾).如果best_guess返回了关于'猜测'的确定性,那将是很好的.
使用标准 matshow 示例:
from matplotlib.pylab import *
dim = (12,12)
aa = zeros(dim)
for i in range(min(dim)):
aa[i,i] = i
matshow(aa)
show()
Run Code Online (Sandbox Code Playgroud)

(来源:matplotlib.org)
如何控制每一行的高度?
在我的例子中,行索引(即国家)可以用非线性间距(例如GDP)来表示来表示大小,我想通过改变缩放向量的行高来表示。(即,如果有 12 行,那么在均匀分布的情况下,每行的行高将为 [0.083, 0.083, ...., 0.083] 表示的 1/12,那么不均匀的行高可以由任何向量设置,其总和为1)
python ×8
pandas ×6
oop ×2
immutability ×1
inheritance ×1
ipython ×1
latex ×1
matplotlib ×1
methods ×1
numba ×1
numpy ×1
tex ×1