小编Ast*_*rid的帖子

用科学轴绘图,改变有效数字的数量

我在matplotlib中制作了以下情节,其中包括其他内容plt.ticklabel_format(axis='y',style='sci',scilimits=(0,3)).这样产生一个y轴:

在此输入图像描述

现在的问题是我希望y轴有嘀嗒声[0, -2, -4, -6, -8, -12].我玩过scilimits但却无济于事.

如何强制蜱只有一个有效数字而没有尾随零,并在需要时浮动?

MWE在下面添加:

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 10000.0, 10.)
s = np.sin(np.pi*t)*np.exp(-t*0.0001)

fig, ax = plt.subplots()

ax.tick_params(axis='both', which='major')
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,3))
plt.plot(t,s)

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

python plot matplotlib

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

两个seaborn distplots同一轴

我试图找到一个很好的方法来绘制同一轴上的两个distplots(来自seaborn).它不像我想要的那样漂亮,因为直方图条是相互覆盖的.我不想使用countplotbarplot只是因为它们看起来不漂亮.当然,如果没有其他方式我会以这种方式做,但distplot看起来非常好.但是,如上所述,这些酒吧现在相互覆盖(见图).

因此,有没有办法将两个distplot频率条拟合到一个bin上,以便它们不重叠?或者把计数放在彼此之上?基本上我想在seaborn中这样做:

在此输入图像描述

任何清理它的想法都是最受欢迎的.谢谢.

MWE:

sns.set_context("paper",font_scale=2)
sns.set_style("white")
rc('text', usetex=False)
fig, ax = plt.subplots(figsize=(7,7),sharey=True)
sns.despine(left=True)

mats=dict()
mats[0]=[1,1,1,1,1,2,3,3,2,3,3,3,3,3]
mats[1]=[3,3,3,3,3,4,4,4,5,6,1,1,2,3,4,5,5,5]
N=max(max(set(mats[0])),max(set(mats[1])))

binsize = np.arange(0,N+1,1)
B=['Thing1','Thing2']
for i in range(len(B)):
    ax = sns.distplot(mats[i],
                      kde=False,
                      label=B[i],
                      bins=binsize)

ax.set_xlabel('My label')
ax.get_yaxis().set_visible(False)
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python matplotlib seaborn

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

使用python diff()的数组中所有1D点之间的差异?

寻找关于如何编写函数(或者可以推荐已经存在的函数)的提示,该函数计算数组中所有条目之间的差异,即对数组diff()中的所有条目组合的实现,而不仅仅是连续对.

这是我想要的一个例子:

# example array
a = [3, 2, 5, 1]
Run Code Online (Sandbox Code Playgroud)

现在我们想要应用一个函数,它将返回所有条目组合之间的差异.现在假设这length(a) == 4意味着组合的总数是,对于N = 4; N*(N-1)*0.5 = 6(如果a的长度为5,则组合的总数将为10,依此类推).所以函数应该为vector返回以下内容a:

result = some_function(a)
print result
array([-1, 2, -2, 3, -1, -4])
Run Code Online (Sandbox Code Playgroud)

因此'函数'将类似于pdist但不是计算欧几里德距离,它应该简单地计算沿一个轴的笛卡尔坐标之间的差异,例如,如果我们假设条目a是坐标,则计算z轴.可以注意到,我需要每个差异的符号来理解每个点所在的轴的哪一侧.

谢谢.

python numpy scipy difference

5
推荐指数
1
解决办法
2264
查看次数

在pandas数据框(和)列表上使用scipy pdist

我又遇到了一个奇怪的问题.

假设我有以下虚拟数据框(通过演示我的问题):

import numpy as np
import pandas as pd
import string

# Test data frame
N = 3
col_ids = string.letters[:N]
df = pd.DataFrame(
    np.random.randn(5, 3*N), 
    columns=['{}_{}'.format(letter, coord) for letter in col_ids for coord in list('xyz')])

df
Run Code Online (Sandbox Code Playgroud)

这会产生:

     A_x         A_y         A_z         B_x         B_y         B_z         C_x         C_y         C_z
0   -1.339040    0.185817    0.083120    0.498545   -0.569518    0.580264    0.453234    1.336992   -0.346724
1   -0.938575    0.367866    1.084475    1.497117    0.349927   -0.726140   -0.870142   -0.371153   -0.881763
2   -0.346819   -1.689058   -0.475032   -0.625383   -0.890025    0.929955    0.683413    0.819212    0.102625
3    0.359540 …
Run Code Online (Sandbox Code Playgroud)

python numpy list scipy pandas

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

无法读取的笔记本NotJSONError('笔记本似乎不是JSON:u \'{\\ n“ cells”:[\\ n {\\ n“ cell_type”:“ ...',)

当我尝试加载ipython笔记本时出现此非常奇怪的错误。以前从未有过,而且我无法回忆,记得对ipython做过任何愚蠢的事情:

Unreadable Notebook: /path/to/notebooks/results.ipynb NotJSONError('Notebook does not appear to be JSON: u\'{\\n "cells": [\\n  {\\n   "cell_type": "...',)
Run Code Online (Sandbox Code Playgroud)

其次是

400 GET /api/contents/results.ipynb?type=notebook&_=1440010858974 (127.0.0.1) 36.17ms referer=http://localhost:8888/notebooks/results.ipynb
Run Code Online (Sandbox Code Playgroud)

json ipython ipython-notebook

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

在主要单元之前执行 jupyter notebook 中的特定单元格

假设我的笔记本中有一个主单元格,让我们调用main. 我不想每次使用 main 时都运行一大堆单元格,但我必须这样做,因为这main取决于它们中的功能。

因此,如果main取决于 say 单元格,c1并且c2是否有特殊的魔法命令或可以放置在c1and 中的东西c2,它会告诉笔记本在我运行之前运行这些命令main。我的笔记本通常包含数百个单元格,因此从一开始就加载它们并不是真正的选择。

谢谢

附注。我完全知道我可以从笔记本中取出所有这些,然后导入全部。我特别不想那样做。

python jupyter-notebook

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

将新索引添加到MultiIndex数据帧pandas的特定级别

这是我想要做的一个例子:

import io
import pandas as pd
data = io.StringIO('''Fruit,Color,Count,Price
Apple,Red,3,$1.29
Apple,Green,9,$0.99
Pear,Red,25,$2.59
Pear,Green,26,$2.79
Lime,Green,99,$0.39
''')
df_unindexed = pd.read_csv(data)
df = df_unindexed.set_index(['Fruit', 'Color'])
Run Code Online (Sandbox Code Playgroud)

输出:

Out[5]: 
             Count  Price
Fruit Color              
Apple Red        3  $1.29
      Green      9  $0.99
Pear  Red       25  $2.59
      Green     26  $2.79
Lime  Green     99  $0.39
Run Code Online (Sandbox Code Playgroud)

现在假设我想计算"颜色"级别中的键数:

L = []
for i in pd.unique(df.index.get_level_values(0)):
    L.append(range(df.xs(i).shape[0]))

list(np.concatenate(L))
Run Code Online (Sandbox Code Playgroud)

然后我将结果列表添加[0,1,0,1,0]为新列:

df['Bob'] = list(np.concatenate(L))
Run Code Online (Sandbox Code Playgroud)

如此:

             Count  Price  Bob
Fruit Color                   
Apple Red        3  $1.29    0
      Green      9  $0.99    1
Pear  Red …
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas

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

将输出管道连接到具有多个输入的bash功能

这是我要尝试做的事情:我想使用bash测量两根琴弦之间的Levensthein距离。我在这里找到了LD的实现。

现在,假设我有一些玩具数据,例如:

1    The brown fox jumped    The green fox jumped
0    The red fox jumped    The green fox jumped
1    The gray fox jumped    The green fox jumped
Run Code Online (Sandbox Code Playgroud)

并说它存储在中data.test

然后,我通过一个简单的awk命令将其过滤掉,1以此类推:

awk -F '\t' '{if ($1>0) print $2,t,$3}' data.test
Run Code Online (Sandbox Code Playgroud)

然后,此简单命令的第一个输出将是:

The brown fox jumped    The green fox jumped
Run Code Online (Sandbox Code Playgroud)

现在,我想通过将输出直接管道传递到此函数(从以上链接中提取)来测量这两个句子之间的Levensthein距离:

function levenshtein {
    if (( $# != 2 )); then
        echo "Usage: $0 word1 word2" >&2
    elif (( ${#1} < ${#2} …
Run Code Online (Sandbox Code Playgroud)

bash awk pipe levenshtein-distance

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

使用MATLAB和Python规范函数获得不同的答案

在比较MATLAB和Python函数时,我得到了关于简单矩阵规范的两个截然不同的答案.

R =

    0.9940    0.0773   -0.0773
   -0.0713    0.9945    0.0769
    0.0828   -0.0709    0.9940
Run Code Online (Sandbox Code Playgroud)

然后在MATLAB中:

>> norm(R)

ans =

     1
Run Code Online (Sandbox Code Playgroud)

但在Python中

from scipy.linalg import norm
import numpy as np

print norm(R),np.linalg.norm(R)

1.73205080757 1.73205080757
Run Code Online (Sandbox Code Playgroud)

哪里

print scipy.__version__,np.__version__
0.14.0 1.9.0
Run Code Online (Sandbox Code Playgroud)

我是如何全面搞砸的呢?

python matlab numpy matrix scipy

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

关闭 Light Table 中的自动完成功能

如何关闭 Light Table 中的自动完成功能?

可能user.behaviors看起来是这样

[
 [:app :lt.objs.style/set-skin "dark"]
;; Automagically closes parentheses
 [:app :lt.objs.settings/pair-keymap-diffs]

 [:editor :lt.objs.editor/wrap]
 [:editor :lt.objs.editor/line-numbers]
 [:editor :lt.objs.style/font-settings "Menlo" "9" "1.2"]
 [:editor :lt.objs.style/set-theme "monokai"]

 [:editor.clojure :lt.objs.langs.clj/print-length 1000]
 ;; Turn off autocomplete
 [:editor :lt.plugins.auto-complete/auto-show-on-input]
]
Run Code Online (Sandbox Code Playgroud)

我尝试添加[:editor :lt.plugins.auto-complete/auto-show-on-input]但它不起作用。

clojure lighttable

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

在python花括号中,数字来自range()

我怎样才能得到这个输出?

'[{0} {1} {2} {3} {4} {6} {7} {8} {9}]'
Run Code Online (Sandbox Code Playgroud)

我试过这个

string_val ='{{{}}} '.format(range(10))
Run Code Online (Sandbox Code Playgroud)

但它给出了

'{[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]} '
Run Code Online (Sandbox Code Playgroud)

python string

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

在shell中添加字符到文件的结尾和开头

我有一堆大型矩阵需要重新格式化,理想情况下使用shell.

假设我将这些内容存储在example.csv中:

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

然后我做

cat example.csv | tr ',' ' ' | awk '{print "["$0"]"}'
Run Code Online (Sandbox Code Playgroud)

要得到

[1 2 3]
[2 3 4]
[5 6 7] 
Run Code Online (Sandbox Code Playgroud)

但我需要我的最终格式看起来如此

[[1 2 3]
 [2 3 4]
 [5 6 7]]
Run Code Online (Sandbox Code Playgroud)

那么如何使用sed,awk或类似的shell来完成这个呢?即前面[是示例的开头并附]加到示例的最后一行?

想象一下,我的.csv矩阵有几千列和行.

csv bash shell awk sed

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

在Python中从单个循环创建多个字符串的单行程序

使用列表理解我可以创建像这样简单的东西

['X{}'.format(x) for x in range(2)]
Run Code Online (Sandbox Code Playgroud)

从而产生['X0', 'X1']. 但我想创建单独的多个输出字符串,最好来自同一个列表理解语句。

我希望我的输出['X0','Y0','Z0','X1','Y1' 'Z1']自然地类似于['X{},Y{},Z{}'.format(x,x,x) for x in range(2)],但不太符合要求。

关于如何在一行中完成此操作有什么想法吗?

编辑:它在一行上并不重要,但它会很好。

python string

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