小编Iva*_*van的帖子

boost :: variant的迭代器

那里,

我正在尝试将现有代码调整为boost :: variant.想法是使用boost :: variant作为异构向量.问题是代码的其余部分使用迭代器来访问向量的元素.有没有办法将boost :: variant与迭代器一起使用?

我试过了

 typedef boost::variant<Foo, Bar> Variant;
 std::vector<Variant> bag;
 std::vector<Variant>::iterator it;
 for(it= bag.begin(); it != bag.end(); ++it){

 cout<<(*it)<<endl;
 }
Run Code Online (Sandbox Code Playgroud)

但它没有用.

编辑:谢谢你的帮助!但是在我的设计中,我需要从列表中获取一个元素并将其传递给代码的其他部分(这可能是令人讨厌的,因为我正在使用GSL).使用迭代器的想法是我可以将迭代器传递给函数,该函数将对来自该特定元素的返回数据进行操作.我看不出如何使用for_each做到这一点.我需要做类似的事情:

for(it=list.begin(); it!=list.end();++it) {
  for(it_2=list.begin(); it_2!=list.end();++it_2) {

     if(it->property() != it_2->property()) {

        result = operate(it,it_2);

       }
    }

}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ boost variant boost-variant

4
推荐指数
1
解决办法
2362
查看次数

如何使用 Pandas 编写分区的 Parquet 文件

我正在尝试将 Pandas 数据帧写入分区文件:

df.to_parquet('output.parquet', engine='pyarrow', partition_cols = ['partone', 'partwo'])

TypeError: __cinit__() got an unexpected keyword argument 'partition_cols'
Run Code Online (Sandbox Code Playgroud)

从文档中我预计partition_cols将作为 kwargs 传递给 pyarrow 库。如何使用 Pandas 将分区文件写入本地磁盘?

python pandas parquet pyarrow

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

C++中有两个非常相似的类,只有一种不同的方法:如何实现?

除了一种方法,我有两个几乎相同的类.这些类具有相同的数据部分和所有成员函数,但只有一个:

class A {
private:
  double data;
public:
  double calc(){
     return data*data;
  }
   double especific(){
     return 2.0*data;
  }
 }
Run Code Online (Sandbox Code Playgroud)

除了特定方法之外,第二类是相同的.

这个成员函数特别需要计算所有成员数据,因此不能选择传递值或引用.有没有办法在没有大量代码重复的情况下实现它?要么只使用一个类,要么使用模板,而不是继承(巨大的性能影响).

谢谢

编辑:感谢所有的回复.策略模式可以帮助我的情况,我会尝试它,看看它是否有效.基于我在不同程序中进行的一些测试,我正在避免虚拟继承作为瘟疫.这个例程将随处调用,性能是一个非常重要的因素.

c++ virtual templates function

3
推荐指数
1
解决办法
1488
查看次数

从PySpark ML中的DecisionTreeClassifier获取toDebugString

DecisionTreeClassifier使用这样的管道训练了一个模型:

from pyspark.ml import Pipeline
from pyspark.ml.feature import VectorAssembler, StringIndexer
from pyspark.ml.classification import DecisionTreeClassifier

cl = DecisionTreeClassifier(labelCol='target_idx', featuresCol='features')
pipe = Pipeline(stages=[target_index, assembler, cl])
model = pipe.fit(df_train)

# Prediction and model evaluation
predictions = model.transform(df_test)
Run Code Online (Sandbox Code Playgroud)

阶段是StringIndexer和的实例VectorAssembler。我现在可以评估模型的准确性,例如

mc_evaluator = MulticlassClassificationEvaluator(
labelCol="target_idx", predictionCol="prediction", metricName="precision"    )

accuracy = mc_evaluator.evaluate(predictions)
print("Test Error = {}".format(1.0 - accuracy))
Run Code Online (Sandbox Code Playgroud)

大。现在,我需要检查树模型的结构。文档将我指向名为的属性toDebugString,但是ML DecisionTreeClassifier没有这个属性-它似乎仅是MLLib DecisionTree分类器的属性。如何从ML版本的管道内部的模型中获取树结构并将其绘制?

python apache-spark pyspark

3
推荐指数
1
解决办法
875
查看次数

通过PySpark中的几列从groupby获取具有最大值的行

我有一个类似于的数据框

from pyspark.sql.functions import avg, first

rdd = sc.parallelize(
[
(0, "A", 223,"201603", "PORT"), 
(0, "A", 22,"201602", "PORT"), 
(0, "A", 22,"201603", "PORT"), 
(0, "C", 22,"201605", "PORT"), 
(0, "D", 422,"201601", "DOCK"), 
(0, "D", 422,"201602", "DOCK"), 
(0, "C", 422,"201602", "DOCK"), 
(1,"B", 3213,"201602", "DOCK"), 
(1,"A", 3213,"201602", "DOCK"), 
(1,"C", 3213,"201602", "PORT"), 
(1,"B", 3213,"201601", "PORT"), 
(1,"B", 3213,"201611", "PORT"), 
(1,"B", 3213,"201604", "PORT"), 
(3,"D", 3999,"201601", "PORT"), 
(3,"C", 323,"201602", "PORT"), 
(3,"C", 323,"201602", "PORT"), 
(3,"C", 323,"201605", "DOCK"), 
(3,"A", 323,"201602", "DOCK"), 
(2,"C", 2321,"201601", "DOCK"),
(2,"A", 2321,"201602", "PORT")
]
)
df_data …
Run Code Online (Sandbox Code Playgroud)

python apache-spark pyspark

3
推荐指数
1
解决办法
3701
查看次数

sqrt(1.0 - pow(1.0,2))返回-nan

我发现了一个有趣的浮点问题.我必须在我的代码中计算几个平方根,表达式如下:

sqrt(1.0 - pow(pos,2))
Run Code Online (Sandbox Code Playgroud)

其中pos在循环中从-1.0到1.0.-1.0对于pow来说很好,但是当pos = 1.0时,我得到了一个-nan.做一些测试,使用gcc 4.4.5和icc 12.0,输出

1.0 - pow(pos,2) = -1.33226763e-15
Run Code Online (Sandbox Code Playgroud)

1.0 - pow(1.0,2) = 0
Run Code Online (Sandbox Code Playgroud)

要么

poss = 1.0
1.0 - pow(poss,2) = 0
Run Code Online (Sandbox Code Playgroud)

显而易见,第一个会出现问题,而是消极的.任何人都知道为什么pow返回的数字小于0?完整的违规代码如下:

int main() {
  double n_max = 10;
  double a = -1.0;
  double b = 1.0;
  int divisions = int(5 * n_max);
  assert (!(b == a));

  double interval = b - a;
  double delta_theta = interval / divisions;
  double delta_thetaover2 = delta_theta / 2.0;
  double pos = a;
  //for (int i …
Run Code Online (Sandbox Code Playgroud)

c++

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

函数返回中的映射与列表理解

简单的问题:

Matplotlib 有一个返回两个值的函数:

locs,label = plt.yticks()
Run Code Online (Sandbox Code Playgroud)

Pylint 抱怨这一行,告诉我“使用内置函数映射”。所以我去了 pylint 网站,发现了这个:http ://pylint-messages.wikidot.com/messages:w0141 所以,我正在尝试使用列表理解来修复这个警告。但正确的形式是什么?

[(locs,label) for plt.yticks()]
Run Code Online (Sandbox Code Playgroud)

不管用。

谢谢!

编辑:我做了一个简单的测试脚本来尝试显示问题,问题是下面的一行:

#!/usr/bin/python

""" docstring """

import matplotlib.pyplot as plt

LOCS, LABEL = plt.yticks()

plt.yticks(LOCS, map(lambda x: "%.2f" % x, LOCS)) # offending line

print(LOCS)
Run Code Online (Sandbox Code Playgroud)

呃,我看错了。如何调整这个 lambda 以实现列表理解?谢谢

python matplotlib

2
推荐指数
1
解决办法
218
查看次数

在pandas中绘制不同的数据帧时更改绘图标签

我在数据透视表上汇总了一些时间序列信息,因此每个数据透视表都有标记为2015,2014等的列.我想比较每个数据透视表,所以我将它们绘制在同一个轴上:

print pv_test_A.columns
Int64Index([2010, 2011, 2012, 2013, 2014, 2015], dtype='int64')

print pv_test_B.columns
Int64Index([2010, 2011, 2012, 2013, 2014, 2015], dtype='int64')

fig, axes = plt.subplots()
pv_test_A.loc[:,[2015]].plot(ax=axes)
pv_test_B.loc[:,[2015]].plot(ax=axes)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每一行在图表上都有相同的标签,2015.我尝试将label参数传递给图表无效.有没有办法重命名标签,而不必诉诸使用plt.legend或注释?

python matplotlib pandas

2
推荐指数
1
解决办法
2011
查看次数

从 Natural Earth 和 OpenStreetMap for Cartopy 下载数据

我正在尝试使用 cartopy 绘制几张地图,并且我想离线使用它们。Cartopy 有一个数据目录,

import cartopy.config
cartopy.config
{'data_dir': '/home/user/.local/share/cartopy',
'downloaders': {('shapefiles',
'gshhs'): <cartopy.io.shapereader.GSHHSShpDownloader at 0x7f3ee33ee7d0>,
('shapefiles',
 'natural_earth'): <cartopy.io.shapereader.NEShpDownloader at 0x7f3ee33ee710>},
'pre_existing_data_dir': '',
'repo_data_dir': '/home/user/bin/virtualenvs/mobi/local/lib/python2.7/site-packages/cartopy/data'}
Run Code Online (Sandbox Code Playgroud)

所以我相信我可以从Natural Earth网站下载地图。我怎样才能在这个目录上构造这些数据,这样 cartopy 就不会使用互联网来绘图?如何对 OpenStreetMap 数据执行同样的操作?

python openstreetmap cartopy

2
推荐指数
1
解决办法
7292
查看次数

Pyspark Schema 中 StructType 的 VectorType

我正在阅读具有以下架构的镶木地板文件:

df.printSchema()

root
 |-- time: integer (nullable = true)
 |-- amountRange: integer (nullable = true)
 |-- label: integer (nullable = true)
 |-- pcaVector: vector (nullable = true)
Run Code Online (Sandbox Code Playgroud)

现在我想测试 Pyspark 结构化流,我想使用相同的镶木地板文件。我能够创建的最接近的模式是使用 ArrayType,但它不起作用:

schema = StructType(
    [
        StructField('time', IntegerType()),
        StructField('amountRange', IntegerType()),
        StructField('label', IntegerType()),
        StructField('pcaVector', ArrayType(FloatType()))

    ]
)
df_stream = spark.readStream\
    .format("parquet")\
    .schema(schema)\
    .load("/home/user/test_arch/data/fraud/")

Caused by: java.lang.ClassCastException: Expected instance of group converter but got "org.apache.spark.sql.execution.datasources.parquet.ParquetPrimitiveConverter"
        at org.apache.parquet.io.api.Converter.asGroupConverter(Converter.java:37)
        at org.apache.spark.sql.execution.datasources.parquet.ParquetRowConverter$RepeatedGroupConverter.<init>(ParquetRowConverter.scala:659)
        at org.apache.spark.sql.execution.datasources.parquet.ParquetRowConverter.org$apache$spark$sql$execution$datasources$parquet$ParquetRowConverter$$newConverter(ParquetRowConverter.scala:308)
Run Code Online (Sandbox Code Playgroud)

如何为 Pyspark 中的 StructType 创建一个带有 VectorType 的模式,它似乎只存在于 Scala 中?

python apache-spark pyspark

2
推荐指数
1
解决办法
1983
查看次数