我正在使用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) 我正在尝试使用logical_and两个或更多numpy数组.我知道numpy有这个功能logical_and(),但我发现简单的运算符&返回相同的结果并且可能更容易使用.
例如,考虑三个numpy数组a,b和c.是
np.logical_and(a, np.logical_and(b,c))
相当于
a & b & c?
如果它们(或多或少)相同,使用的优点是logical_and()什么?
我正在尝试将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) 我试图使用浮点数作为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) 我正在尝试最大化由 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)
有人可以帮我找出哪里出了问题吗?
我想在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字典定义如下,其中最里面的项是双元素数组:
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 ×5
numpy ×3
arrays ×2
dictionary ×1
django ×1
heroku ×1
indexing ×1
lambda ×1
matplotlib ×1
optimization ×1
pandas ×1
scipy ×1
series ×1
sympy ×1