小编Mat*_*yra的帖子

带有generator/iterable/iterator的Python随机样本

你知道是否有办法让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 random generator

38
推荐指数
3
解决办法
2万
查看次数

Python列表/子列表选择-1怪异

所以我一直在玩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的交易是什么,我意识到我不需要它.

python list sublist

37
推荐指数
2
解决办法
16万
查看次数

使用更改的模块路径取消python对象

我正在尝试将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)

python import pickle

18
推荐指数
2
解决办法
7548
查看次数

使用模块共享夹具运行pytest单元测试的PyDev失败

我在使用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)

python unit-testing pydev pytest

13
推荐指数
1
解决办法
2585
查看次数

来自另一个数据帧的pandas multiindex赋值

我试图了解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并且有两个块AB.现在,如果我想分配值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)

python variable-assignment multi-index pandas

13
推荐指数
1
解决办法
5467
查看次数

从spark DataFrame中提取`Seq [(String,String,String)]`

我有一排火花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, …

scala dataframe apache-spark apache-spark-sql

12
推荐指数
1
解决办法
1万
查看次数

dask dataframe apply meta

我想在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 pandas dask

12
推荐指数
1
解决办法
6609
查看次数

无法在Mountain Lion上安装numpy

我是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 numpy nltk

11
推荐指数
1
解决办法
7044
查看次数

实现带有约束的python列表

我需要一个python list对象,在插入时,会自动检查表单的某些约束:"A必须始终在B之前"或"如果包含C,它必须始终最后".

实现这一目标最简单/最快捷的方法是什么.最明显的办法是重写它改变其内容(列表中的数据类型的所有方法append,extend,insert,等),并验证限制在手术后仍持有.只是因为有很多这些方法,所以这很繁琐.有没有更简单的方法?

python data-structures

10
推荐指数
1
解决办法
895
查看次数

如何在交叉验证和GridSearchCV中实现SMOTE

我对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 pipeline scikit-learn cross-validation grid-search

8
推荐指数
1
解决办法
4901
查看次数