我想升级Scipy的0.9.0到0.12.0.我使用命令:
sudo pip install --upgrade scipy
Run Code Online (Sandbox Code Playgroud)
我得到了各种各样的错误,这些错误可以在pip.log文件中看到,我很遗憾不是很容易理解错误的python.任何帮助将不胜感激.
我是Python的新手,并认为这应该是一个相当普遍的问题,但无法找到解决方案.我已经看过这个页面,发现它对一个项目很有帮助,但我很难将示例扩展到多个项目而不使用'for'循环.我正在通过Emcee为250名步行者运行这段代码,所以我正在寻找最快的方法.
我有一个数字列表a = [x,y,z],我想重复b = [1,2,3]一次(例如),所以我最终得到一个列表列表:
[
[x],
[y,y],
[z,z,z]
]
Run Code Online (Sandbox Code Playgroud)
我的'for'循环是:
c = [ ]
for i in range (0,len(a)):
c.append([a[i]]*b[i])
Run Code Online (Sandbox Code Playgroud)
这正是我想要的,但意味着我的代码极其缓慢.我也尝试过天真地将a和b转换为数组并[a]*b希望它能够逐个元素地增加,但没有快乐.
该问题的最小工作示例:
import matplotlib.pyplot as plt
horiz_line = 0.0005
vert_line = 110
x_data = [10, 30, 50, 70, 90, 110, 130, 150, 170, 190, 210, 230, 250, 270, 290, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490]
y_data = [0.0074999999999999997, 0.011875, 0.0057812499999999999, 0.0036458333333333334, 0.0020312500000000001, 0.0013125000000000001, 0.00098958333333333342, 0.00089285714285714283, 0.00074218750000000001, 0.00093749999999999997, 0.00071874999999999999, 0.00088068181818181821, 0.00078125000000000004, 0.0004807692307692308, 0.00055803571428571425, 0.00083333333333333339, 0.00066406250000000005, 0.00069852941176470592, 0.00059027777777777778, 0.00059210526315789478, 0.00062500000000000001, 0.0007291666666666667, 0.00068181818181818187, 0.00059782608695652171, 0.00053385416666666663]
fig = plt.figure() # create the top-level container
# horizontal line
plt.axhline(y=horiz_line, xmin=0, xmax=max(x_data), color='red', …Run Code Online (Sandbox Code Playgroud) 以下MWE产生一个简单的散点图:
import numpy as np
import matplotlib.pyplot as plt
# Generate some random two-dimensional data:
m1 = np.random.normal(size=100)
m2 = np.random.normal(scale=0.5, size=100)
# Plot data with 1.0 max limit in y.
plt.figure()
# Set x axis limit.
plt.xlim(0., 1.0)
# Plot points.
plt.scatter(m1, m2)
# Show.
plt.show()
Run Code Online (Sandbox Code Playgroud)
在此图中,x轴限制设置为[0., 1.].我需要设定上 y轴的极限为1离开下限到任何min值在m2是(即:让python决定的下限值).
在这种特殊情况下,我可以使用plt.ylim(min(m2), 1.0)但是我的实际代码要复杂得多,因为要绘制很多东西,所以这样做并不是一个真正的选择.
我试过设置:
plt.ylim(top=1.)
Run Code Online (Sandbox Code Playgroud)
并且:
plt.gca().set_ylim(top=1.)
Run Code Online (Sandbox Code Playgroud)
在这里建议如何设置'auto'作为上限,但使用matplotlib.pyplot保持固定的下限,但两个命令似乎都不起作用.它们都正确地将y轴的上限设置为1.但它们也强制下限为0.这是我不想要的.
我正在使用Python 2.7.3和Matplotlib 1.2.1.
我的代码经过一些文件,用命令将它们读入列表:
data = np.loadtxt(myfile, unpack=True)
Run Code Online (Sandbox Code Playgroud)
其中一些文件是空的(我无法控制),当发生这种情况时,我会在屏幕上显示此警告:
/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py:795: UserWarning: loadtxt: Empty input file: "/path_to_file/file.dat"
warnings.warn('loadtxt: Empty input file: "%s"' % fname)
Run Code Online (Sandbox Code Playgroud)
如何防止此警告显示?
我想在一些数据点上安装一个平面并绘制它.我目前的代码是这样的:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
points = [(1.1,2.1,8.1),
(3.2,4.2,8.0),
(5.3,1.3,8.2),
(3.4,2.4,8.3),
(1.5,4.5,8.0)]
xs, ys, zs = zip(*points)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xs, ys, zs)
point = np.array([0.0, 0.0, 8.1])
normal = np.array([0.0, 0.0, 1.0])
d = -point.dot(normal)
xx, yy = np.meshgrid([-5,10], [-5,10])
z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2]
ax.plot_surface(xx, yy, z, alpha=0.2, color=[0,1,0])
ax.set_xlim(-10,10)
ax.set_ylim(-10,10)
ax.set_zlim( 0,10)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这导致以下结果:

正如您所看到的那样,我手动创建平面.我怎么计算呢?我猜这有可能以scipy.optimize.minimize …
我试图获得一些指数适合某些x,y数据的置信区间(此处可用).这是MWE我必须找到最适合数据的指数:
from pylab import *
from scipy.optimize import curve_fit
# Read data.
x, y = np.loadtxt('exponential_data.dat', unpack=True)
def func(x, a, b, c):
'''Exponential 3-param function.'''
return a * np.exp(b * x) + c
# Find best fit.
popt, pcov = curve_fit(func, x, y)
print popt
# Plot data and best fit curve.
scatter(x, y)
x = linspace(11, 23, 100)
plot(x, func(x, *popt), c='r')
show()
Run Code Online (Sandbox Code Playgroud)
产生:

如何在这个拟合上获得95%(或其他一些值)的置信区间,最好使用pure python,numpy或者scipy(我已经安装过的软件包)?
有没有办法gnuplot在x和/或y轴上设置tic标记的颜色?我正在使用png非常暗的背景文件,我希望内部的抽搐以白色显示,而不是默认的黑色.
我有两个词典:
SP = dict{'key1': 'value1','key2': 'value2'}
CP = dict{'key1': 'value1','key2': 'value2'}
Run Code Online (Sandbox Code Playgroud)
我有一个函数,想把这两个词典作为输入,但我不知道该怎么做.
我试过了:
def test(**SP,**CP):
print SP.keys(),CP.keys()
test(**SP,**CP)
Run Code Online (Sandbox Code Playgroud)
通过对两个词典的大量修改,实际功能将更加复杂.但简单的测试功能对我不起作用:(
我试图了解NumPy模块中的箭头功能是如何工作的.据推测,它允许以图形方式显示两个阵列的值,例如水平和垂直速度.我有以下非常简单的例子,但我只是为了看看你是否可以帮助我找出我做得不好的事情来展示它:
x = np.linspace(0,1,11)
y = np.linspace(1,0,11)
u = v = np.zeros((11,11))
u[5,5] = 0.2
plt.quiver(x, y, u, v)
Run Code Online (Sandbox Code Playgroud)
代码生成下图:

如您所见,箭头不是箭头,而是一条线,它长于0.2.我的目的是得到一个长度为0.2的箭头,我想我可以用它来做quiver.可能吗?或者我应该更好地使用另一个命令?
python ×9
matplotlib ×4
numpy ×4
scipy ×3
arguments ×1
arrays ×1
dictionary ×1
emcee ×1
gnuplot ×1
list ×1
loops ×1
regression ×1
upgrade ×1