小编ims*_*msc的帖子

在python中按值对defaultdict排序

我有一个数据结构,如下所示:

不同年份的三个城市的人口如下.

Name  1990 2000 2010
A     10   20   30
B     20   30   10
C     30   10   20
Run Code Online (Sandbox Code Playgroud)

我用a defaultdict来存储数据.

from collections import defaultdict
cityPopulation=defaultdict(list)
cityPopulation['A']=[10,20,30]
cityPopulation['B']=[20,30,10]
cityPopulation['C']=[30,10,20]
Run Code Online (Sandbox Code Playgroud)

我想defaultdict根据列表中的特定列(年份)对其进行排序.比如说,1990年的排序,应该给C,B,A,而2010年的排序应该给A,C,B.

此外,这是存储数据的最佳方式吗?当我改变人口价值时,我希望它是可变的.

python sorting dictionary defaultdict

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

matplotlib居中条形图与日期

为了得到x轴是日期的条形,我做的是这样的:

import numpy as np
import matplotlib.pyplot as plt
import datetime

x = [datetime.datetime(2010, 12, 1, 0, 0),
    datetime.datetime(2011, 1, 1, 0, 0),
    datetime.datetime(2011, 5, 1, 1, 0)]
y = [4, 9, 2]

ax = plt.subplot(111)
barWidth=20
ax.bar(x, y, width=barWidth)
ax.xaxis_date()

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,图不以x为中心.如果以前使用过ax.bar(x-barWidth/2.,y,width = barWidth)来获取以x为中心的条形.当x轴值是日期时,有没有办法得到相同的?

python datetime matplotlib

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

指示条形图中的统计上显着的差异

我使用条形图来指示每个组的数据.这些条中的一些彼此显着不同.如何指出条形图中的显着差异?

import numpy as np
import matplotlib.pyplot as plt
menMeans   = (5, 15, 30, 40)
menStd     = (2, 3, 4, 5)
ind = np.arange(4)    # the x locations for the groups
width=0.35
p1 = plt.bar(ind, menMeans, width=width, color='r', yerr=menStd)
plt.xticks(ind+width/2., ('A', 'B', 'C', 'D') )
Run Code Online (Sandbox Code Playgroud)

我的目标是

在此输入图像描述

python matplotlib figure

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

多处理中不同工作人员的输出相同

我有一些非常简单的案例,可以将工作分解并分配给工人.我从这里尝试了一个非常简单的多处理示例:

import multiprocessing
import numpy as np
import time

def do_calculation(data):
    rand=np.random.randint(10)
    print data, rand
    time.sleep(rand)
    return data * 2

if __name__ == '__main__':
    pool_size = multiprocessing.cpu_count() * 2
    pool = multiprocessing.Pool(processes=pool_size)

    inputs = list(range(10))
    print 'Input   :', inputs

    pool_outputs = pool.map(do_calculation, inputs)
    print 'Pool    :', pool_outputs
Run Code Online (Sandbox Code Playgroud)

上面的程序产生以下输出:

Input   : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 7
1 7
2 7
5 7
3 7
4 7
6 7
7 7
8 6 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multiprocessing

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

为什么LASSO在sklearn(python)和matlab统计包中有所不同?

我使用LaasoCVfrom sklearn来选择最佳模型是通过交叉验证选择的.我发现如果我使用sklearn或matlab统计工具箱,交叉验证会得到不同的结果.

我使用matlab并复制了http://www.mathworks.se/help/stats/lasso-and-elastic-net.html中给出的示例 来获取这样的数字

在此输入图像描述

然后我保存了matlab数据,并尝试用laaso_pathfrom 复制数字sklearn,我得到了

在此输入图像描述

虽然这两个数字之间有一些相似之处,但也存在一定的差异.据我所知,参数lambdain matlabalphain sklearn是相同的,但是在这个图中似乎存在一些差异.有人可以指出哪一个是正确的,还是我错过了什么?此外,获得的系数也不同(这是我主要关心的问题).

Matlab代码:

rng(3,'twister') % for reproducibility
X = zeros(200,5);
for ii = 1:5
      X(:,ii) = exprnd(ii,200,1);
end
r = [0;2;0;-3;0];
Y = X*r + randn(200,1)*.1;

save randomData.mat % To be used in python code

[b fitinfo] = lasso(X,Y,'cv',10);
lassoPlot(b,fitinfo,'plottype','lambda','xscale','log');

disp('Lambda with min MSE')
fitinfo.LambdaMinMSE
disp('Lambda with 1SE')
fitinfo.Lambda1SE
disp('Quality of Fit')
lambdaindex = …
Run Code Online (Sandbox Code Playgroud)

python statistics matlab linear-regression scikit-learn

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

勾选标签以跨越多条线

是否有可能使x-tick标签跨越两条线?比方说,如果我的x-tick标签是

January 2008, February 2008, March 2008
Run Code Online (Sandbox Code Playgroud)

我想要他们

January  February  March
  2008     2008    2008
Run Code Online (Sandbox Code Playgroud)

我不想旋转它们.

python matplotlib

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

9
推荐指数
1
解决办法
7100
查看次数

图左侧有两个y轴

我想绘制具有不同y轴的曲线,它们共享相同的x轴.我之前使用过该twinx功能,但它将它们绘制在图的不同侧面.有没有办法在左侧绘制它们.我正在寻找类似以下的东西在此输入图像描述

但是两个轴都在同一侧.上面示例的代码在这里.

在不同的情况下,可以按某种特定顺序绘制曲线,因为z顺序不起作用 twinx

matplotlib

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

在numpy中对独特元素的索引进行分组

我有许多大型(> 100,000,000)整数列表,其中包含许多重复项.我想得到每个元素出现的索引.目前我正在做这样的事情:

import numpy as np
from collections import defaultdict

a = np.array([1, 2, 6, 4, 2, 3, 2])
d=defaultdict(list)
for i,e in enumerate(a):
    d[e].append(i)

d
defaultdict(<type 'list'>, {1: [0], 2: [1, 4, 6], 3: [5], 4: [3], 6: [2]})
Run Code Online (Sandbox Code Playgroud)

这种迭代每个元素的方法是耗时的.有没有一种有效或矢量化的方法来做到这一点?

Edit1 我在下面尝试了Acorbe和Jaime的方法

a = np.random.randint(2000, size=10000000)
Run Code Online (Sandbox Code Playgroud)

结果是

original: 5.01767015457 secs
Acorbe: 6.11163902283 secs
Jaime: 3.79637312889 secs
Run Code Online (Sandbox Code Playgroud)

python numpy python-2.7

9
推荐指数
1
解决办法
2401
查看次数

为什么在添加新列时会复制data.table?

将新列添加到data.table从磁盘加载的列时,将复制该列.

library('data.table')
dt <- data.table(a=1,b=2)
save.image("test.RData")
load("test.RData")
dt
$   a b
$1: 1 2

class(dt)
$[1] "data.table" "data.frame"

address(dt)
$[1] "00000000046F1F38"  

dt[, b := NULL]
address(dt)
$[1] "00000000046F1F38"
dt[, c := 2]
address(dt)
$[1] "000000000D815618"
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我做错了什么?我正在使用1.9.6data.table包.

r data.table

9
推荐指数
1
解决办法
87
查看次数