小编Foo*_*Bar的帖子

高效的2d cumsum

说我有这样的数组

>>> a = np.arange(1,8).reshape((1,-1))
>>> a
array([[1, 2, 3, 4, 5, 6, 7]])
Run Code Online (Sandbox Code Playgroud)

并且我想为每个项目创建a一个"下4个项目的cumsum".也就是说,我的预期输出是

1,       2,      3, 4, 5, 6, 7, 8
1+2,     2+3,     ...
1+2+3    2+3+4    ...
1+2+3+4  2+3+4+5  ...
Run Code Online (Sandbox Code Playgroud)

即包含的矩阵

1, 2, 3, 4, 5, 0, 0, 0
3, 5, 7, 9, 11,0, 0, 0
6, 9, 12,15,18,0, 0, 0
10,14,18,21,26,0, 0, 0
Run Code Online (Sandbox Code Playgroud)

由于最后3个项目的cumsum操作无法正确完成,我期待0那里.我知道如何做一个单一的cumsum.实际上,阵列是

a[:4].cumsum().reshape((-1,1)); a[1:5].cumsum().reshape((-1,1))...
Run Code Online (Sandbox Code Playgroud)

水平堆放.但是,我不知道如何以有效的方式做到这一点.这样做的好的矢量化numpy方式是什么?我也对scipy包装开放,只要它们numpy在效率或可读性方面占主导地位.

python arrays numpy scipy cumsum

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

使用NaN绘制/创建数据集的散点图

我想使用pylab绘制散点图,但是,我的一些数据是NaN这样的:

a = [1, 2, 3]
b = [1, 2, None]
Run Code Online (Sandbox Code Playgroud)

pylab.scatter(a,b) 不起作用.

有没有什么方法可以在不显示这些NaN价值的情况下绘制实际价值点?

python matplotlib

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

在特定子阵列处评估数组

我提前警告:此刻我可能完全糊涂了.我讲一个关于我实际尝试实现的简短故事,因为这可能会让事情变得清晰起来.说我有f(a,b,c,d,e),我想找到arg max (d,e) f(a,b,c,d,e).考虑一个离散网格(的简单的例子)Ff:

F = np.tile(np.arange(0,10,0.1)[newaxis,newaxis,:,newaxis,newaxis], [10, 10, 1, 10, 10])
maxE = F.max(axis=-1)
argmaxD = maxE.argmax(axis=-1)
maxD = F.max(axis=-2)
argmaxE = maxD.argmax(axis=-1)
Run Code Online (Sandbox Code Playgroud)

这就是我通常如何解决离散化版本的情况.但现在假设相反,我想解决arg max d f(a,b,c,d,e=X):与其选择最佳e每隔输入,e是一个固定的和给定的(大小AxBxCxD,在这个例子是的10x10x100x10).我有麻烦解决这个问题.

我天真的做法是

X = np.tile(np.arange(0,10)[newaxis,newaxis,:,newaxis], [10,10,1,10])
maxX = F[X]
argmaxD = maxX.argmax(axis=-1)
Run Code Online (Sandbox Code Playgroud)

然而,崩溃我的IDE的大量内存意味着F[X]显然不是我想要的.

表现是关键.

python numpy

6
推荐指数
1
解决办法
355
查看次数

PyCharm的控制台挂着"大"物体

我正在使用PyCharm,并且通常在其Python控制台中运行部分脚本以进行调试.但是,当我必须在"大"变量上运行某些东西(消耗大量内存)时,控制台变得非常慢.

Say df是一个庞大的pandas数据框,只要我df.在控制台中输入,它就不会再响应10-15秒了.我不知道这是否是特定的熊猫,因为我使用的唯一"大"变量来自熊猫.

我在Mac OS X 10.9.4(8 GB内存)上运行社区版3.4.1,pandas 0.14,Python 2.7.3.

大小df:

In[94]: df.values.nbytes + df.index.nbytes + df.columns.nbytes
Out[94]: 2229198184
Run Code Online (Sandbox Code Playgroud)

python pycharm pandas

6
推荐指数
1
解决办法
1126
查看次数

Pip不承认Cython

我刚刚在全新的Mac OS安装中通过home-brew安装了pip和Python.

首先,我的pip根本没有安装依赖项 - 这迫使我重新运行'pip install tables'3次,每次它会告诉我一个依赖项,我会安装它然后再重新运行它.这是预期的行为吗?

其次,它不接受它刚刚安装的Cython的安装:

$ pip show cython
---
Name: Cython
Version: 0.21
Location: /usr/local/lib/python2.7/site-packages
Requires: 
Run Code Online (Sandbox Code Playgroud)

$ pip install tables
Downloading/unpacking tables
  Downloading tables-3.1.1.tar.gz (6.7MB): 6.7MB downloaded
  Running setup.py (path:/private/var/folders/r_/9cc9_ldj7g35cqnfql52hqt80000gn/T/pip_build_excuvator/tables/setup.py) egg_info for package tables
    * Using Python 2.7.8 (default, Aug 24 2014, 21:26:19)
    * Found numpy 1.9.0 package installed.
    * Found numexpr 2.4 package installed.
    .. ERROR:: You need Cython 0.13 or greater to compile PyTables!
    Complete output from command python setup.py egg_info:
    * Using …
Run Code Online (Sandbox Code Playgroud)

python pip pytables

6
推荐指数
1
解决办法
5409
查看次数

为什么strsplit会返回一个列表

考虑

text <- "who let the dogs out"
fooo <- strsplit(text, " ")
fooo
[[1]]
[1] "who"  "let"  "the"  "dogs" "out" 
Run Code Online (Sandbox Code Playgroud)

输出strsplit是一个列表.然后列表的第一个元素是一个向量,其中包含上面的单词.

为什么函数表现那样?是否有任何情况会返回包含多个元素的列表?

我可以使用

fooo[[1]][1]
[1] "who"
Run Code Online (Sandbox Code Playgroud)

,但有没有更简单的方法?

regex parsing r strsplit

6
推荐指数
1
解决办法
1909
查看次数

使用Kernprof更改时间单位

我开始使用来寻找Python的瓶颈line_profiler。现在,我正在通过运行

kernprof -l -v myFile.py
Run Code Online (Sandbox Code Playgroud)

但是,时间单位似乎为1e-6,导致输出结果如132329040。如何增加时间间隔,以使输出在更大的时间增量内更具可读性?

python profiling line-profiler

6
推荐指数
3
解决办法
822
查看次数

Python + Numpy:手动收集垃圾什么时候有用?

读到可以使用手动收集垃圾

gc.collect()
Run Code Online (Sandbox Code Playgroud)

现在我想知道什么时候这样做有用。我想它在某种程度上是通用的 Python 逻辑。假设我有一个大循环,并且在每个循环中都会使用大矩阵Z并一次又一次地重写它们。如果我不改变 的大小,最后删除矩阵并收集垃圾有用Z吗?

一般问题在什么情况下可以真正观察到强制垃圾收集的影响,尤其是在进行大量数值计算时numpy

python garbage-collection numpy scipy

6
推荐指数
1
解决办法
423
查看次数

将趋势线添加到pandas

我有时间序列数据,如下:

                  emplvl
date                    
2003-01-01  10955.000000
2003-04-01  11090.333333
2003-07-01  11157.000000
2003-10-01  11335.666667
2004-01-01  11045.000000
2004-04-01  11175.666667
2004-07-01  11135.666667
2004-10-01  11480.333333
2005-01-01  11441.000000
2005-04-01  11531.000000
2005-07-01  11320.000000
2005-10-01  11516.666667
2006-01-01  11291.000000
2006-04-01  11223.000000
2006-07-01  11230.000000
2006-10-01  11293.000000
2007-01-01  11126.666667
2007-04-01  11383.666667
2007-07-01  11535.666667
2007-10-01  11567.333333
2008-01-01  11226.666667
2008-04-01  11342.000000
2008-07-01  11201.666667
2008-10-01  11321.000000
2009-01-01  11082.333333
2009-04-01  11099.000000
2009-07-01  10905.666667
Run Code Online (Sandbox Code Playgroud)

时间序列图

我想以最简单的方式在该图上添加线性趋势(带截距).此外,我想计算这一趋势,仅以2006年之前的数据为条件.

我在这里找到了一些答案,但它们都包括在内statsmodels.首先,这些答案可能不是最新的:pandas改进,现在本身包括一个OLS组件.其次,statsmodels似乎估计每个时间段的个体固定效应,而不是线性趋势.我想我可以重新计算一个运行季度变量,但是大多数人都有更舒服的方法吗?

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 emplvl   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                    nan
Method: …
Run Code Online (Sandbox Code Playgroud)

python machine-learning matplotlib pandas statsmodels

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

Matplotlib 和 Latex 投影仪:正确的尺寸

关于matplotlib/Python和latex的集成问了几个问题,但是我找不到以下内容:

当我savefig()在乳胶中包含创建的 pdf 文件时,我总是

includegraphics[scale=0.5]{myFile.pdf}
Run Code Online (Sandbox Code Playgroud)

并且比例通常在0.4或左右0.5。鉴于我正在创建 A5 投影仪幻灯片,生成正确大小的 pdf 文件的正确方法是什么,这样我就不需要在乳胶中指定它?

请注意,这些不是全尺寸的仅图像投影仪幻灯片,它需要稍微小一些以允许页眉、页脚和标题。

python latex matplotlib

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