SciPy似乎在其自己的命名空间中提供了大多数(但不是全部[1])的NumPy函数.换句话说,如果有一个名为的函数numpy.foo,几乎可以肯定的是scipy.foo.大多数情况下,两者看起来完全相同,通常甚至指向同一个函数对象.
有时,他们是不同的.举一个最近出现的例子:
numpy.log10是一个返回NaNs为负参数的ufunc ;scipy.log10 返回负参数的复数值,并且看起来不是ufunc.同样可以说,大约log,log2和logn,但不是关于log1p[2].
另一方面,numpy.exp并且scipy.exp对于相同的ufunc看起来是不同的名称.这也是真正的scipy.log1p和numpy.log1p.
另一个例子是numpy.linalg.solveVS scipy.linalg.solve.它们相似,但后者提供了一些额外的功能.
为什么明显重复?如果这是numpy对scipy命名空间的批量导入,为什么行为和缺失函数的微妙差异?是否有一些总体逻辑可以帮助消除混乱?
[1] ,,numpy.min 和其他几个人都在没有同行的命名空间.numpy.maxnumpy.absscipy
[2]使用NumPy 1.5.1和SciPy 0.9.0rc2进行测试.
我是Numpy的ndarray类的子类,添加了一些元数据和其他方法.我试图按照指示这篇文章和那一个.但是,一些Numpy(或Scipy)函数返回基类"ndarray"而不是我的自定义子类.其他Numpy函数返回我的子类,我不知道差异的原因是什么.如何让所有numpy/scipy函数返回我的子类?这就是我做的:
class Signal(np.ndarray):
def __new__(cls, filename):
#print "In __new__" #TEMP DEBUG
ret = np.fromfile(filename, dtype = np.int32)
ret = ret.view(cls) # convert to my class, i.e. Signal
ret.parse_filename(filename)
return ret
def __array_finalize__(self, obj):
#print "in __array_finalize__" #TEMP DEBUG
if obj is None: return # shouldn't actually happen.
# copy meta-fields from source, if it has them (otherwise put None's)
self.filename = getattr(obj, "filename", None)
self.folder = getattr(obj, "folder", None)
self.label = getattr(obj, "label", None)
self.date = …Run Code Online (Sandbox Code Playgroud) arr = np.arange(0,11)
slice_of_arr = arr[0:6]
slice_of_arr[:]=99
# slice_of_arr returns
array([99, 99, 99, 99, 99, 99])
# arr returns
array([99, 99, 99, 99, 99, 99, 6, 7, 8, 9, 10])
Run Code Online (Sandbox Code Playgroud)
如上所示,您不能直接更改值slice_of_arr,因为它是一个视图arr,而不是一个新变量.
我的问题是:
.copy然后分配价值不是很乏味吗?.copy?如何更改NumPy的默认行为?