你知道是否有办法让python random.sample与生成器对象一起工作.我试图从一个非常大的文本语料库中获取随机样本.问题是random.sample()引发以下错误.
TypeError: object of type 'generator' has no len()
Run Code Online (Sandbox Code Playgroud)
我在想,也许有一些方法itertools可以用来自某些东西来做这件事但却找不到任何有点搜索的东西.
一个有点组成的例子:
import random
def list_item(ls):
for item in ls:
yield item
random.sample( list_item(range(100)), 20 )
Run Code Online (Sandbox Code Playgroud)
UPDATE
按照MartinPieters的要求,我做了目前提出了三种方法的一些具体时机.结果如下.
Sampling 1000 from 10000
Using iterSample 0.0163 s
Using sample_from_iterable 0.0098 s
Using iter_sample_fast 0.0148 s
Sampling 10000 from 100000
Using iterSample 0.1786 s
Using sample_from_iterable 0.1320 s
Using iter_sample_fast 0.1576 s
Sampling 100000 from 1000000
Using iterSample 3.2740 s
Using sample_from_iterable 1.9860 s
Using …Run Code Online (Sandbox Code Playgroud) 所以我一直在玩python并注意到一些看起来有些奇怪的东西.-1从列表中选择的语义似乎不一致.
所以我有一个数字列表
ls = range(1000)
Run Code Online (Sandbox Code Playgroud)
当然,列表的最后一个元素,ls[-1]但如果我采用一个子列表,以便从中点到最后得到所有内容我会做
ls[500:-1]
Run Code Online (Sandbox Code Playgroud)
但这并没有给我一个包含列表中最后一个元素的列表,而是一个包含UP到最后一个元素的列表.但是,如果我这样做
ls[0:10]
Run Code Online (Sandbox Code Playgroud)
我得到一个包含第十个元素的列表(因此选择器应该包含在内),为什么它不起作用-1.
我当然可以做ls[500:]或ls[500:len(ls)](这将是愚蠢的).我只是想知道-1的交易是什么,我意识到我不需要它.
我正在尝试将Project A同事构建的项目集成到另一个python项目中.现在这位同事没有在他的代码中使用相对导入,而是完成了
from packageA.moduleA import ClassA
from packageA.moduleA import ClassB
Run Code Online (Sandbox Code Playgroud)
然后腌制课程cPickle.为了整洁,我想隐藏他(Project A)在我的项目中构建的包.然而,这会改变定义的类的路径packageA.没问题,我只是重新定义导入使用
from ..packageA.moduleA import ClassA
from ..packageA.moduleA import ClassB
Run Code Online (Sandbox Code Playgroud)
但是现在unle pickle这些类失败并显示以下消息
with open(fname) as infile: self.clzA = cPickle.load(infile)
ImportError: No module named packageA.moduleA
Run Code Online (Sandbox Code Playgroud)
那么为什么cPickle显然没有看到模块defs.我是否需要添加packageA系统路径的根?这是解决问题的正确方法吗?
该cPickled文件看起来像
ccopy_reg
_reconstructor
p1
(cpackageA.moduleA
ClassA
p2
c__builtin__
object
p3
NtRp4
Run Code Online (Sandbox Code Playgroud)
旧的项目层次结构就是那种
packageA/
__init__.py
moduleA.py
moduleB.py
packageB/
__init__.py
moduleC.py
moduleD.py
Run Code Online (Sandbox Code Playgroud)
我想把所有这些都放进去 WrapperPackage
MyPackage/
.. __init__.py
.. myModuleX.py
.. myModuleY.py
WrapperPackage/
.. …Run Code Online (Sandbox Code Playgroud) 我在使用pyDev运行pytest单元测试时遇到问题.我尝试使用模块共享夹具和终结器进行单元测试,在最后一次测试后应该将其推迟.但是当在pyDev中运行单元测试时,它不使用相同的实例,而是创建两个不同的实例.该示例在控制台中运行正常,或者从pydev中的脚本启动时运行正常.
我在Win7上使用平台Python 2.7.3,pytest-2.3.4,pyDev 2.7.3.2013031601,Eclipse 4.2.
我在http://pytest.org/latest/fixture.html上尝试了这个例子
pydev的输出是:
============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
__________________________________ test_ehlo ___________________________________
smtp = <smtplib.SMTP instance at 0x027F9080>
__________________________________ test_noop ___________________________________
smtp = <smtplib.SMTP instance at 0x027FF3C8>
Run Code Online (Sandbox Code Playgroud)
控制台输出是:
============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
__________________________________ test_ehlo ___________________________________
smtp = <smtplib.SMTP instance at 0x01E51288>
__________________________________ test_noop ___________________________________
smtp = <smtplib.SMTP instance at 0x01E51288>
Run Code Online (Sandbox Code Playgroud)
这是预期的行为.我究竟做错了什么??
使用的代码是conftest.py:
import pytest
import smtplib
@pytest.fixture(scope="module")
def smtp():
return …Run Code Online (Sandbox Code Playgroud) 我试图了解pandas MultiIndex DataFrames以及如何为它们分配数据.具体来说,我有兴趣分配与另一个较小数据帧匹配的整个块.
ix = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c', 'd']])
df = pd.DataFrame(index=ix, columns=['1st', '2nd', '3rd'], dtype=np.float64)
df_ = pd.DataFrame(index=['a', 'b', 'c', 'd'], columns=['1st', '2nd', '3rd'], data=np.random.rand(4, 3))
df_
1st 2nd 3rd
a 0.730251 0.468134 0.876926
b 0.104990 0.082461 0.129083
c 0.993608 0.117799 0.341811
d 0.784950 0.840145 0.016777
Run Code Online (Sandbox Code Playgroud)
df是相同的,除了所有的值都有,NaN并且有两个块A和B.现在,如果我想分配值df_,df我想我可以做类似的事情
df.loc['A',:] = df_ # Runs, does not work
df.loc[('A','a'):('A','d')] = df_ # AssertionError (??) 'Start slice bound …Run Code Online (Sandbox Code Playgroud) 我有一排火花DF Seq[(String, String, String)].我正试图做某种flatMap事情,但我做的任何尝试最终都会抛出
java.lang.ClassCastException:org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema无法强制转换为scala.Tuple3
我可以从DF中获取单行或多行就好了
df.map{ r => r.getSeq[Feature](1)}.first
Run Code Online (Sandbox Code Playgroud)
回报
Seq[(String, String, String)] = WrappedArray([ancient,jj,o], [olympia_greece,nn,location] .....
Run Code Online (Sandbox Code Playgroud)
并且RDD的数据类型似乎是正确的.
org.apache.spark.rdd.RDD[Seq[(String, String, String)]]
df的架构是
root
|-- article_id: long (nullable = true)
|-- content_processed: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- lemma: string (nullable = true)
| | |-- pos_tag: string (nullable = true)
| | |-- ne_tag: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
我知道这个问题与处理RDD行的spark sql有关,org.apache.spark.sql.Row即使他们愚蠢地说它是一个Seq[(String, String, String)].有一个相关的问题(链接如下),但这个问题的答案对我不起作用.我也不熟悉火花来弄清楚如何将它变成一个有效的解决方案.
行Row[Seq[(String, …
我想在dask数据帧的单个列上进行频率计数.代码可以工作,但我得到一个没有定义的warning抱怨meta.如果我试图定义meta我得到一个错误AttributeError: 'DataFrame' object has no attribute 'name'.对于这个特定的用例,它看起来不像我需要定义,meta但我想知道如何做以备将来参考.
虚拟数据帧和列频率
import pandas as pd
from dask import dataframe as dd
df = pd.DataFrame([['Sam', 'Alex', 'David', 'Sarah', 'Alice', 'Sam', 'Anna'],
['Sam', 'David', 'David', 'Alice', 'Sam', 'Alice', 'Sam'],
[12, 10, 15, 23, 18, 20, 26]],
index=['Column A', 'Column B', 'Column C']).T
dask_df = dd.from_pandas(df)
Run Code Online (Sandbox Code Playgroud)
In [39]: dask_df.head()
Out[39]:
Column A Column B Column C
0 Sam Sam 12
1 Alex David 10 …Run Code Online (Sandbox Code Playgroud) 我是Python的新手,我正在尝试基于http://nltk.org/install.html安装NLTK
我已经安装了所有东西,除了numpy(它说numpy是可选的但是当我尝试导入时nltk,它说有一个错误,因为它找不到numpy模块)
我跑完之后 sudo pip install -U numpy
我正在使用Mountain Lion,python v2.7.3在Mac上运行
我收到以下错误(我只包括日志的结尾):
在get_mathlib_info中输入文件"/private/tmp/pip-build/numpy/numpy/core/setup.py",第696行
引发RuntimeError("破碎的工具链:无法链接简单的C程序")
RuntimeError:破坏的工具链:无法链接简单的C程序
命令python setup.py egg_info失败,错误代码为/ tmp/pip-build/numpy
有没有人见过这种情况?
我需要一个python list对象,在插入时,会自动检查表单的某些约束:"A必须始终在B之前"或"如果包含C,它必须始终最后".
实现这一目标最简单/最快捷的方法是什么.最明显的办法是重写它改变其内容(列表中的数据类型的所有方法append,extend,insert,等),并验证限制在手术后仍持有.只是因为有很多这些方法,所以这很繁琐.有没有更简单的方法?
我对Python比较陌生。您可以帮助我将SMOTE的实施改进到适当的流程吗?我想要的是对每k倍迭代的训练集应用过采样和欠采样,以便在平衡的数据集上训练模型,并在不平衡的遗漏片段上进行评估。问题是,当我这样做时,无法使用熟悉的sklearn界面进行评估和网格搜索。
有可能做类似的事情吗model_selection.RandomizedSearchCV?我对此:
df = pd.read_csv("Imbalanced_data.csv") #Load the data set
X = df.iloc[:,0:64]
X = X.values
y = df.iloc[:,64]
y = y.values
n_splits = 2
n_measures = 2 #Recall and AUC
kf = StratifiedKFold(n_splits=n_splits) #Stratified because we need balanced samples
kf.get_n_splits(X)
clf_rf = RandomForestClassifier(n_estimators=25, random_state=1)
s =(n_splits,n_measures)
scores = np.zeros(s)
for train_index, test_index in kf.split(X,y):
print("TRAIN:", train_index, "TEST:", test_index)
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
sm = SMOTE(ratio = 'auto',k_neighbors = 5, n_jobs …Run Code Online (Sandbox Code Playgroud) python ×9
pandas ×2
apache-spark ×1
dask ×1
dataframe ×1
generator ×1
grid-search ×1
import ×1
list ×1
multi-index ×1
nltk ×1
numpy ×1
pickle ×1
pipeline ×1
pydev ×1
pytest ×1
random ×1
scala ×1
scikit-learn ×1
sublist ×1
unit-testing ×1