我有一个2维NumPy数组.我知道如何获得轴上的最大值:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Run Code Online (Sandbox Code Playgroud)
如何获得最大元素的索引?所以我想作为输出array([1,1,0])
我有一个numpy数组列表和一个numpy数组.我想检查单个数组是否是列表的成员.
我想有一种方法,我没有正确搜索...这就是我想出的:
def inList(array, list):
for element in list:
if np.array_equal(element, array):
return True
return False
Run Code Online (Sandbox Code Playgroud)
这个实现是否正确?这有什么功能吗?
我通过Anaconda 2.1.0发行版使用scipy和numpy.我使用Spyder作为我的Python IDE.
当我运行时 import scipy as sp,我无法访问子包,例如optimize,linalg,cluster等sp.
但是,当我运行时import numpy as np,我能够访问其所有子包,例如linalg,random,matrixlib,polynomial,testing等np.
这两种进口是否有不同的原因?为什么不import scipy as sp抓住所有scipy子包进入sp命名空间?
在matplotlib 3D绘图中,我可以设置行/列的数量,以确定表面上可见的面的总数
s=ax.plot_surface(x,y,z, color='gray', shade=True, rstride=1,cstride=1)
Run Code Online (Sandbox Code Playgroud)
其中数字越小越好,但是面数越小.由于我也在这个表面上绘制流线/轨迹,我想摆脱脸的边缘.现在,随着
s.set_linewidth(0)
Run Code Online (Sandbox Code Playgroud)
设置较低的rstride和cstride值我几乎可以得到我想要的东西,即表面几乎连续变化的颜色,可以提供良好的3D效果.
不幸的是,线条留在那里,作为面之间的空位.有没有办法做到这一点?也许我只是错过了一个简单的命令..
编辑:生成曲面的代码很长,无法在此处报告.我附上了上面写的解决方法的结果快照.
我正在尝试使用来自scipy的odeint解决二阶ODE。我遇到的问题是该函数隐式地与二阶项耦合,如简化的代码段所示(请忽略示例的假装物理学):
import numpy as np
from scipy.integrate import odeint
def integral(y,t,F_l,mass):
dydt = np.zeros_like(y)
x, v = y
F_r = (((1-a)/3)**2 + (2*(1+a)/3)**2) * v # 'a' implicit
a = (F_l - F_r)/mass
dydt = [v, a]
return dydt
y0 = [0,5]
time = np.linspace(0.,10.,21)
F_lon = 100.
mass = 1000.
dydt = odeint(integral, y0, time, args=(F_lon,mass))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我意识到可以代数求解隐式变量,但是在我的实际场景中,逻辑之间存在很多逻辑F_r,a并且代数运算的评估失败。
我相信可以使用MATLAB的ode15i函数来解决DAE ,但我尝试尽可能避免这种情况。
我的问题是-有办法解决python(最好是scipy)中的隐式ODE函数(DAE)吗?有没有更好的方法解决以上问题呢?
作为最后的选择,可以接受上a一个时间步长。dydt[1]每个时间步长后如何传递回函数?
假设a是一些numppy.array带有n个元素的1d :
a = np.array([a_0, a_1, ..., a_n_minus_1])
Run Code Online (Sandbox Code Playgroud)
我想在第i行生成包含第i个循环移位的2d(n X n):numpy.arraya
np.array([[a_0, a_1, ..., a_n_minus_1], [a_n_minus_1, a_0, a_1, ...], ...]])
Run Code Online (Sandbox Code Playgroud)
最好没有环.如何有效地完成这项工作?
(该函数np.roll似乎相关,但显然只需要一个标量shift.)
我在Bokeh中绘制了很多点,并且我已经将HoverTool添加到图的工具列表中,以便x,y鼠标在接近字形时显示鼠标的坐标.
当鼠标接近紧密堆积在一起的一组字形时,我会获得与字形一样多的工具提示.我只想要一个工具提示,一个最接近的字形.这不仅仅是一个演示细节,因为对于很多点,这会导致:
import numpy.random
from bokeh.plotting import figure, output_notebook, show
from bokeh.models import HoverTool
output_notebook()
hover = HoverTool()
hover.tooltips = [("(x,y)", "($x, $y)")]
x = numpy.random.randn(500)
y = numpy.random.randn(500)
p = figure(tools=[hover])
p.circle(x,y, color='red', size=14, alpha=0.4)
show(p)
Run Code Online (Sandbox Code Playgroud) 我正在努力理解信号数值积分的问题。基本上,我有一个信号,我想将其积分或执行,并将其反导作为时间的函数(用于获取磁场的拾波线圈的积分)。我尝试了两种不同的方法,原则上应该是一致的,但事实并非如此。我正在使用的代码如下。请注意,代码中的信号 y 之前已经使用巴特沃斯滤波进行了高通滤波(类似于此处所做的http://wiki.scipy.org/Cookbook/ButterworthBandpass)。信号和时间基准可以在此处下载(https://www.dropbox.com/s/fi5z38sae6j5410/Trial.npz?dl=0)
import scipy as sp
from scipy import integrate
from scipy import fftpack
data = np.load('trial.npz')
y = data['arr_1'] # this is the signal
t = data['arr_0']
# integration using pfft
bI = sp.fftpack.diff(y-y.mean(),order=-1)
bI2= sp.integrate.cumtrapz(y-y.mean(),x=t)
Run Code Online (Sandbox Code Playgroud)
现在,这两个信号(除了可以取出的最终不同的线性趋势之外)是不同的,或者更好的是动态地它们在相同的振荡时间下非常相似,但是两个信号之间存在大约 30 的系数,在这个意义上bI2 比 bI 低 30 倍(大约)。顺便说一句,我减去了两个信号的平均值,以确保它们是零均值信号,并在 IDL 中执行积分(均具有等效的 cumsumtrapz 和傅里叶域)给出与 bI2 兼容的值。任何线索都非常受欢迎