在闲置浏览命名空间的同时,我注意到一个名为" Ellipsis " 的奇怪物体,它似乎没有或做任何特殊的事情,但它是一个全局可用的内置.
在搜索之后,我发现它被Numpy和Scipy用于切片语法的一些模糊变体......但几乎没有别的.
这个对象是否专门用于支持Numpy + Scipy?省略号是否具有任何通用含义或用途?
D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis
Run Code Online (Sandbox Code Playgroud) 我需要编写一个函数来检测输入是否包含至少一个非数字值.如果找到非数字值,我将引发错误(因为计算应该只返回一个数值).预先不知道输入数组的维数 - 无论ndim如何,该函数都应给出正确的值.作为一个额外的复杂功能,输入可以是单个浮点数numpy.float64,甚至可以是像零维数组一样的奇怪数据.
解决此问题的显而易见的方法是编写一个递归函数,该函数迭代数组中的每个可迭代对象,直到找到非迭代.它将numpy.isnan()在每个不可迭代的对象上应用该函数.如果找到至少一个非数字值,则该函数将立即返回False.否则,如果iterable中的所有值都是数字,则最终将返回True.
这很好,但它很慢,我希望NumPy有更好的方法来做到这一点.什么是更快,更numpyish的替代品?
这是我的模型:
def contains_nan( myarray ):
"""
@param myarray : An n-dimensional array or a single float
@type myarray : numpy.ndarray, numpy.array, float
@returns: bool
Returns true if myarray is numeric or only contains numeric values.
Returns false if at least one non-numeric value exists
Not-A-Number is given by the numpy.isnan() function.
"""
return True
Run Code Online (Sandbox Code Playgroud) 我正在尝试移植一个程序,该程序使用手动插值器(由数学家大学开发)来使用scipy提供的插值器.我想使用或包装scipy插值器,使其尽可能接近旧插值器的行为.
两个函数之间的关键区别在于我们的原始插值器 - 如果输入值高于或低于输入范围,我们的原始插值器将推断结果.如果你用scipy插值器尝试这个,它会引发一个ValueError.以此程序为例:
import numpy as np
from scipy import interpolate
x = np.arange(0,10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)
print f(9)
print f(11) # Causes ValueError, because it's greater than max(x)
Run Code Online (Sandbox Code Playgroud)
是否有一种明智的方法可以使它不会崩溃,最后一行只是做一个线性推断,将第一个和最后两个点定义的渐变延续到无穷大.
请注意,在真实软件中我实际上并没有使用exp函数 - 这只是为了说明!
肯定是一个0d阵列是标量,但Numpy似乎并不这么认为......我错过了什么或者我只是误解了这个概念?
>>> foo = numpy.array(1.11111111111, numpy.float64)
>>> numpy.ndim(foo)
0
>>> numpy.isscalar(foo)
False
>>> foo.item()
1.11111111111
Run Code Online (Sandbox Code Playgroud) 我一直在为一些应该非常容易的东西感到困惑,但是在一个没有结果的三个小时之后我还没有解决它:
一位朋友让我修复了他的WordPress网站的模板,以便水平导航菜单栏在页面上水平居中.他希望它能够舒适地穿过红色部分的底部中间 - 然后它将恰好适合红色页面两侧的两个标志.
红色部分(class="header")已text-align设置为center.这似乎足以确保其下方的标题和描述文本居中对齐但由于某种原因我无法使菜单(即a ul)与页面中心对齐.
有人会建议我做错了吗?为什么我不能让菜单居中?我需要在样式表中进行哪些更改才能使其正常工作?
我有一个看起来像这样的2d数组:
XX
xx
Run Code Online (Sandbox Code Playgroud)
添加额外行和列的最有效方法是什么:
xxy
xxy
yyy
Run Code Online (Sandbox Code Playgroud)
对于奖励积分,我也希望能够淘汰单行和列,所以例如在下面的矩阵中我希望能够淘汰所有的只留下x的 - 特别是我是试图同时删除第n行和第n列 - 我希望能够尽快完成此操作:
xxaxx
xxaxx
aaaaa
xxaxx
xxaxx
Run Code Online (Sandbox Code Playgroud) 我被要求测试第三方提供的图书馆.众所周知,该库对于n个有效数字是准确的.可以安全地忽略任何不太重要的错误.我想写一个函数来帮助我比较结果:
def nearlyequal( a, b, sigfig=5 ):
Run Code Online (Sandbox Code Playgroud)
此函数的目的是确定两个浮点数(a和b)是否大致相等.如果a == b(完全匹配),或者当以十进制写入舍入为sigfig有效数字时a和b具有相同的值,则该函数将返回True .
任何人都可以建议一个好的实施?我写了一个迷你单元测试.除非你能在我的测试中看到一个错误,否则一个好的实现应该传递以下内容:
assert nearlyequal(1, 1, 5)
assert nearlyequal(1.0, 1.0, 5)
assert nearlyequal(1.0, 1.0, 5)
assert nearlyequal(-1e-9, 1e-9, 5)
assert nearlyequal(1e9, 1e9 + 1 , 5)
assert not nearlyequal( 1e4, 1e4 + 1, 5)
assert nearlyequal( 0.0, 1e-15, 5 )
assert not nearlyequal( 0.0, 1e-4, 6 )
Run Code Online (Sandbox Code Playgroud)
补充说明:
Windows终端(像cmd.exe这样的文本应用程序周围的用户界面)真的很糟糕.
Windows终端显然无法做到的Unix风格终端有很多功能,例如,如果你想通过拖动边框来重新调整两个维度的窗口大小.Windows终端只允许您更改其长度.
切换和粘贴,在Linux或Unix上,没问题 - 选择框很好地包装,所以你可以剪切多行表达式.Windows终端(即使在快速编辑模式下)强制使用一个没有实际用途的奇怪的矩形选择框 - 您必须重新格式化在记事本中复制的所有内容!
事实上,只要我进入"编辑"模式,它就会阻止应用程序 - 我确信有些人希望能够在不停止业务关键型服务器的情况下进行剪切和粘贴.
我敢肯定,如果我们把它放在心上,我们可以想到更多的错误 - 但不要抱怨......我们能做些什么才能让它变得更好?
更新:为了澄清,我不打算替换cmd.exe - Powershell和CygWin都提供了更好的选择.我正在尝试替换控制台应用程序,即围绕Windows中所有文本应用程序的GUI.
我有一个问题,需要一个可逆的1:1键到值的映射.
这意味着有时我想找到一个给定键的值,但有时我想找到给定值的键.键和值都保证唯一.
x = D[y]
y == D.inverse[x]
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案是每次我想要反向查找时简单地反转字典:反转字典非常容易,这里有一个配方但是对于大字典它可能非常慢.
另一种方法是创建一个新的类,它将两个字典统一起来,每个字典对应一种查找.这很可能很快,但会消耗两倍于单个字典的内存.
那么我可以使用更好的结构吗?
这是最近运行的一个用Python编写的不可靠应用程序的堆栈跟踪的一部分,该应用程序控制用Excel编写的另一个应用程序:
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146788248), None)
Run Code Online (Sandbox Code Playgroud)
显然出现了问题...但是什么?[1]这些COM错误代码似乎过于神秘.
如何解码此错误消息?是否有一个表允许我将这个数字错误代码转换为更有意义的东西?
[1]我实际上知道在这种情况下出了什么问题,它试图访问一个没有Name属性的Range对象上的Name属性...并不是所有的bug都很容易找到!