小编Cur*_*arn的帖子

Cython化Python函数以使其更快

几周前,我问了一个关于提高用Python编写的函数速度的问题.那时,TryPyPy引起了我注意使用Cython这样做的可能性.他还举了一个例子,说明我如何Cythonize该代码片段.我想对下面的代码做同样的事情,看看通过声明变量类型我能做多快.我有几个与此相关的问题.我在cython.org上看过教程,但我还是有一些问题.它们密切相关:

  1. 我不知道C.我需要学习哪些部分,使用Cython来声明变量类型?
  2. 与python列表和元组对应的C类型是什么?例如,我可以在Python中使用doubleCython float.我该怎么做列表?通常,我在哪里可以找到给定Python类型的相应C类型.

我如何对下面的代码进行Cython化的任何例子都会非常有用.我在代码中插入了注释,提供有关变量类型的信息.

class Some_class(object):
    ** Other attributes and functions **
    def update_awareness_status(self, this_var, timePd):
        '''Inputs: this_var (type: float)
           timePd (type: int)
           Output: None'''

        max_number = len(self.possibilities)
        # self.possibilities is a list of tuples.
        # Each tuple is a pair of person objects. 

        k = int(math.ceil(0.3 * max_number))
        actual_number = random.choice(range(k))
        chosen_possibilities = random.sample(self.possibilities, 
                                         actual_number)
        if len(chosen_possibilities) > 0:
            # chosen_possibilities is a list of tuples, each tuple is a pair
            # of person objects. …
Run Code Online (Sandbox Code Playgroud)

python performance cython

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

根据一列中的值屏蔽2D numpy数组

假设我有以下numpy数组:

a = [[1, 5, 6],
     [2, 4, 1],
     [3, 1, 5]]
Run Code Online (Sandbox Code Playgroud)

我想掩盖1第一列中的所有行.那就是我想要的

   [[--, --, --],
     [2, 4, 1],
     [3, 1, 5]]
Run Code Online (Sandbox Code Playgroud)

这是否可以使用numpy蒙面数组操作?怎么能这样做?

谢谢.

python arrays numpy mask

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

Pymongo或Mongodb将两个相同的python词典视为不同的对象.我可以强迫他们一起对待吗?

请查看以下代码行和结果:

import pymongo

d1 = {'p': 0.5, 'theta': 100, 'sigma': 20}
d2 = {'theta': 100, 'sigma': 20, 'p': 0.5}

I get the following results:

d1 == d2 // Returns True

collectn.find({'goods.H': d1}).count() // Returns 33

collectn.find({'goods.H': d2}).count() // Returns 2
Run Code Online (Sandbox Code Playgroud)

其中,collectn是Mongodb集合对象.

是否有设置或查询方式,以便我获得上述两个查询相同的结果?

他们基本上是使用相同的字典(在意义上d1 == d2True).我正在尝试执行以下操作:在将记录插入数据库之前,我检查是否已存在具有正在添加的确切值组合的记录.如果是这样,那么我不想创造新纪录.但是由于上面显示的行为,有可能得到记录不存在,即使它确实存在并且重复记录被添加到数据库中(当然,使用不同的_id但所有其他值都是相同的,我宁愿没有那个).

预先感谢您的帮助.

python mongodb pymongo

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

Pickle vs输出到python中的文件

我有一个程序输出一些我想要存储的列表以便以后使用.例如,假设它输出学生姓名列表和其他中期分数列表.我可以通过以下两种方式存储此输出:

标准文件输出方式:

newFile = open('trialWrite1.py','w')
newFile.write(str(firstNames))
newFile.write(str(midterm1Scores))
newFile.close()
Run Code Online (Sandbox Code Playgroud)

泡菜方式:

newFile = open('trialWrite2.txt','w')
cPickle.dump(firstNames, newFile)
cPickle.dump(midterm1Scores, newFile)
newFile.close()
Run Code Online (Sandbox Code Playgroud)

哪种技术更好还是首选?使用一个优于另一个有优势吗?

谢谢

python file-io pickle

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

多行,每行基于ggplot2中的不同数据帧 - 自动着色和图例

假设我有以下数据框:

df1 = data.frame(c11 = c(1:5), c12 = c(1:5))
df2 = data.frame(c21 = c(1:5), c22 = (c(1:5))^0.5)
df3 = data.frame(c31 = c(1:5), c32 = (c(1:5))^2)
Run Code Online (Sandbox Code Playgroud)

我想在相同的情节/面板中将这些绘制为线条.我可以做到这一点

p <- ggplot() + geom_line(data=df1, aes(x=c11, y = c12)) + 
     geom_line(data=df2, aes(x=c21,y=c22)) + 
     geom_line(data=df3, aes(x=c31, c32))
Run Code Online (Sandbox Code Playgroud)

所有这些都是黑色的.如果我想要它们的颜色不同,我可以明确指定颜色作为参数geom_line().我的问题是我可以指定几种颜色的列表,比如5种颜色,例如红色,蓝色,绿色,橙色,灰色,并使用该列表,这样我就不必明确指定颜色作为geom_line的参数()如果是每一行.如果绘图p包含2个geom_line()语句,则它们将分别为红色和蓝色着色.如果它包含3个geom_line语句,它将为红色,蓝色和绿色着色.最后,如何为这些图指定图例.即使我可以在最后给出颜色作为矢量p也很棒.如果问题不明确,请告诉我.

谢谢.

r ggplot2

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

如何直接以gzip格式保存pandas数据帧?

我有一个pandas数据框,叫做df.

我想以gzip格式保存它.一种方法是:

import gzip
import pandas

df.save('filename.pickle')
f_in = open('filename.pickle', 'rb')
f_out = gzip.open('filename.pickle.gz', 'wb')
f_out.writelines(f_in)
f_in.close()
f_out.close()
Run Code Online (Sandbox Code Playgroud)

但是,这需要我先创建一个名为的文件filename.pickle.有没有办法更直接地做到这一点,即没有创造filename.pickle

当我想加载已经gzip压缩的数据帧时,我必须完成创建filename.pickle的相同步骤.例如,要读取一个 filename2.pickle.gzipgzipped pandas数据帧的文件,我知道以下方法:

f_in = gzip.open('filename2.pickle.gz', 'rb')
f_out = gzip.open('filename2.pickle', 'wb')
f_out.writelines(f_in)
f_in.close()
f_out.close()

df2 = pandas.load('filename2.pickle')
Run Code Online (Sandbox Code Playgroud)

这可以不filename2.pickle先创建吗?

python gzip pandas

9
推荐指数
3
解决办法
8649
查看次数

对于不是很大的文件,Pytables与CSV

我最近遇到了Pytables并发现它非常酷.很明显,对于非常大的数据集,它们优于csv格式.我正在使用python运行一些模拟.输出不是很大,比如200列和2000行.

如果有人对两者都有经验,那么从长远来看,你能否建议哪种格式对于不是很大的数据集会更方便.Pytables具有数据处理功能和使用Vitables浏览数据,但浏览器没有像Excel那样可用于CSV的功能.同样,如果主要在python中工作,你是否找到一个比另一个更好的导入和导出数据?在文件组织方面更方便吗?对这些问题的任何评论都会有所帮助.

谢谢.

python csv pytables

7
推荐指数
1
解决办法
3205
查看次数

使用字符串指定的名称保存R数据帧

在这个很棒的论坛上,我看到了一篇文章,展示了如何将字符串转换为变量并为该变量分配数据框.例如:

x ="thisisthestring"

# df is a data frame
assign(x, df) # This will assign data frame df to variable thisisthestring
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用名称保存此数据框thisisthestring.但是,如果我试试

assign(x, df)
save(x, file='somefilename.rda') 
Run Code Online (Sandbox Code Playgroud)

该文件只包含一个字符串"thisisthestring"而不是数据框df.

我也试过了

save(assign(x, df), file = 'somefile.rda'))
Run Code Online (Sandbox Code Playgroud)

这也行不通.有关如何将数据帧保存到文件的任何建议,其中数据框的名称由字符串指定.

r

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

Meteor findOne查询在一个模板助手中返回undefined.在其他模板助手中,相同的查询效果很好

假设我有一个名为Meteor的集合GameStatus.我有不同角色的用户,但我为所有用户发布了GameStatus集合.我只是在server/publications.coffee中使用以下内容

Meteor.publish 'gamestatus', ->
    GameStatus.find()
Run Code Online (Sandbox Code Playgroud)

对于两个角色("S"和"B")我有,当我使用下面的模板助手没有问题的(在文件中定义的客户端/视图/ seller.coffee客户端/视图/ buyer.coffee)

currentRound: ->
    return GameStatus.findOne().currentRound
Run Code Online (Sandbox Code Playgroud)

对于这些我永远不会得到以下错误.

Uncaught TypeError: Cannot read property 'currentRound' of undefined 
Run Code Online (Sandbox Code Playgroud)

但是对于另一个角色('admin'),使用相同的模板助手(在文件client/views/admin.coffee中定义)给出了上面显示的Uncaught TypeError.如果我改为写,它可以工作:

currentRound: ->
    return GameStatus.findOne()?.currentRound
Run Code Online (Sandbox Code Playgroud)

我有点理解为什么会这样.我认为,在加载页面时,该集合首先不可用,然后就可以使用了.但为什么上面显示的其他模板不会发生这种情况?

如果有人可以帮助澄清这一点,我们将非常感激.

javascript meteor

7
推荐指数
1
解决办法
8897
查看次数

帮助理解我在R中定义的函数中的错误

我是R的新手,刚学会编写简单的函数.有人可以帮助我理解为什么以下功能不起作用.

fboxplot <- function(mydataframe, varx, vary)
  {
    p <- ggplot(data=mydataframe, aes(x=varx, y=vary))
    p + geom_boxplot()
  }

col1 = factor(rep(1:3, 3))
col2 = rnorm(9)
col3 = c(rep(10,5), rep(20,4))
df = data.frame(col1 = col1, col2 = col2, col3 = col3)
Run Code Online (Sandbox Code Playgroud)

现在,如果我调用fboxplot函数

fboxplot(df, col1, col2)
Run Code Online (Sandbox Code Playgroud)

我收到了错误Error in eval(expr, envir, enclos): object varx not found.我也试过了

fboxplot(df, varx = col1, vary = col2)
Run Code Online (Sandbox Code Playgroud)

这给出了同样的错误.我哪里错了?

谢谢你的帮助.

r

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

标签 统计

python ×6

r ×3

arrays ×1

csv ×1

cython ×1

file-io ×1

ggplot2 ×1

gzip ×1

javascript ×1

mask ×1

meteor ×1

mongodb ×1

numpy ×1

pandas ×1

performance ×1

pickle ×1

pymongo ×1

pytables ×1