小编use*_*012的帖子

带有注释的Matplotlib与保存的图形截断

我正在使用matplotlib在使用注释时绘制一些图形.我遇到的问题是注释(在绘图区域之外)与保存的图片截断,如下图所示.

带注释的数字被切断

下图是我想要的:

想要的图片

谁知道如何解决这个问题?我注意到人们建议在rcParams中使用plt.tight_plot()或fig.autolayout,但这似乎不起作用.下面是生成图的代码.

fig, ax = plt.subplots()
ax.set_xlim([-0.02,1.1])
ax.set_ylim([-0.02,1.1])

ax.plot([0,0,0,0.5,0.5,0.5,1,1,1], [0,0.5,1,0,0.5,1,0,0.5,1], 'go')

ax.annotate("Digit 2",
            xy=(0.5, -0.1), xycoords='data',
            xytext=(0.5, -0.3), textcoords='data',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3"),
             annotation_clip=False,
             fontsize = 12,
             ha='center',
            )

ax.annotate("Level 2",
            xy=(-0.1, 1), xycoords='data',
            xytext=(-0.35, 1), textcoords='data',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3"),
                    annotation_clip=False,
                    fontsize = 12,
                    va='center',
            )

plt.savefig('sample.png', dpi = 300)
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

numpy.logical_and和&之间的区别

我正在尝试使用logical_and两个或更多numpy数组.我知道numpy有这个功能logical_and(),但我发现简单的运算符&返回相同的结果并且可能更容易使用.

例如,考虑三个numpy数组a,b和c.是 np.logical_and(a, np.logical_and(b,c)) 相当于 a & b & c

如果它们(或多或少)相同,使用的优点是logical_and()什么?

numpy logical-operators

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

无法推送到Heroku:/app/.heroku/python/bin/pip:没有这样的文件或目录

我正在尝试将Django项目推送到Heroku,但它一直告诉我以下内容:

/app/.heroku/python/bin/pip: No such file or directory
Run Code Online (Sandbox Code Playgroud)

完整的错误消息如下所示.我该如何解决这个问题?我需要先在Heroku上安装pip吗?

Counting objects: 451, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (383/383), done.
Writing objects: 100% (451/451), 1.07 MiB | 349.00 KiB/s, done.
Total 451 (delta 87), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-3.5.1
remote: -----> Installing pip
remote: -----> Installing requirements with pip
remote:        /app/tmp/buildpacks/779a8bbfbbe7e1b715476c0b23fc63a2103b3e4131eda558669aba8fb5e6e05682419376144189b29beb5dee6d7626b4d3385edb0954bffea6c67d8cf622fd51
/bin/steps/pip-install: line 5: /app/.heroku/python/bin/pip: No such file or …
Run Code Online (Sandbox Code Playgroud)

django heroku

12
推荐指数
3
解决办法
4090
查看次数

熊猫系列浮动指数

我试图使用浮点数作为pandas系列的索引,但它似乎没有正常工作.例如,在下面的代码中,当我尝试调用值策略[9.7]时,它返回错误.我认为这是因为浮点数9.7在计算机中没有精确地存储为9.7(例如,9.7000000001).反正有没有绕过这个?或者使用浮点索引根本不是一个好主意?

任何输入都非常感谢.谢谢!

import numpy as np
import pandas as pd
W_grid  = np.arange(100)*0.1
policy = pd.Series(np.random.rand(100), index = W_grid)

policy[9.7]
Run Code Online (Sandbox Code Playgroud)
KeyError                                  Traceback (most recent call last)
<ipython-input-224-89dfc3470c3d> in <module>()
----> 1 policy[9.7]

D:\Warren\Anaconda\lib\site-packages\pandas\core\series.pyc in __getitem__(self, key)
    482     def __getitem__(self, key):
    483         try:
--> 484             result = self.index.get_value(self, key)
    485 
    486             if not np.isscalar(result):

D:\Warren\Anaconda\lib\site-packages\pandas\core\index.pyc in get_value(self, series, key)
   2038 
   2039         k = _values_from_object(key)
-> 2040         loc = self.get_loc(k)
   2041         new_values = series.values[loc]
   2042         if np.isscalar(new_values) or new_values is None:

D:\Warren\Anaconda\lib\site-packages\pandas\core\index.pyc …
Run Code Online (Sandbox Code Playgroud)

python indexing series pandas

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

使用 sympy lambdify 和 scipy 进行 Python 优化

我正在尝试最大化由 sympy 定义的函数,但无法使其工作。基本思想可以概括如下:

    import sympy
    from scipy.optimize import minimize
    from sympy.utilities.lambdify import lambdify

    a,b,G = sympy.symbols('a b G')
    func = (G - a)**2 + b
    my_func = lambdify((G,a,b), -1*func)
    results = minimize(my_func,[0.1,0.1,0.1])
Run Code Online (Sandbox Code Playgroud)

如果我定义了一个单变量函数,代码就可以工作,但只要我有多个变量,我就会收到以下错误消息。

    TypeError: <lambda>() takes exactly 3 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我找出哪里出了问题吗?

python optimization lambda sympy scipy

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

numpy:检测数组中的连续1

我想在numpy数组中检测1的连续跨度.实际上,我想首先确定数组中的元素是否在至少三个1的范围内.例如,我们有以下数组a:

    import numpy as np
    a = np.array([1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0])
Run Code Online (Sandbox Code Playgroud)

然后下面的1以粗体显示满足要求的元素.

[ 1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0]

接下来,如果两个1的跨度最多分开两个0,则两个跨距构成更长的跨度.所以上面的数组被描述为

[ 1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0]

换句话说,对于原始数组作为输入,我想要输出如下:

    [True, True, True, True, True, True, True, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, False]
Run Code Online (Sandbox Code Playgroud)

我一直在想一个实现这个功能的算法,但我提出的所有算法似乎都很复杂.所以我很想知道更好的方法来实现这一点 - 如果有人可以帮助我,我将不胜感激.

更新:

我道歉,我没有说清楚我的问题.我想在阵列中识别3个或更多个连续的1作为1的跨度,并且识别任何两个1的跨度,其间只有一个或两个0,以及分离0,作为单个长跨度.我的目标可以通过以下方式理解:如果在1的跨度之间只有一个或两个0,我认为那些0是错误,应该被纠正为1.

@ ritesht93提供的答案几乎可以满足我的需求.但是,当有三个1的跨度由0分隔时,当前的答案不能识别这种情况,应该将其识别为单个跨度.例如,对于数组

    a2 = np.array([0, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

将dict转换为numpy多维数组

我有一个python字典定义如下,其中最里面的项是双元素数组:

    mydict = {1: {1: [1, 2], 2: [3, 4]}, 2: {1: [5, 6], 2: [7, 8]}}
Run Code Online (Sandbox Code Playgroud)

我现在需要的是将所有第0个元素形成为一个新数组,即使用[:,:0]或[...,0]返回[1,3,5,6].但是,[:,:0]或[...,0]在这种情况下不起作用,如下所示.

    import numpy as np
    import pandas as pd
    a = np.array(pd.DataFrame.from_dict(mydict))
    print a
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

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

看来这是一个2x2x2阵列.使用单独的括号访问相应的元素没有问题,例如,[0] [0] [0]返回1.但是,[0,0,0]会导致错误.

    ---------------------------------------------------------------------------
    IndexError                                Traceback (most recent call last)
    <ipython-input-150-f68aba7de42a> in <module>()
    ----> 1 a[0,0,0]

    IndexError: too many indices for array
Run Code Online (Sandbox Code Playgroud)

似乎两元素数组被认为是2x2数组中的元素 - 但我需要的是一个2x2x2数组才能实现我的目标.有没有办法将其转换为2x2x2阵列?

python arrays dictionary numpy

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