给定任何可迭代的,例如:"ABCDEF"
处理它几乎像数字系统一样:
A B C D E F AA AB AC AD AE AF BA BB BC .... FF AAA AAB ....
我将如何在此列表中找到第i 个成员?有效率,而不是通过所有这些计算.我想在这个列表中找到第十亿个(例如)成员.我正在尝试在python中执行此操作,并且我使用2.4(不是选择)可能是相关的,因为我无法访问itertools.
很好,但不是必需的:可以将解决方案推广到伪"混合基数"系统吗?
---结果---
# ------ paul -----
def f0(x, alph='ABCDE'):
result = ''
ct = len(alph)
while x>=0:
result += alph[x%ct]
x /= ct-1
return result[::-1]
# ----- Glenn Maynard -----
import math
def idx_to_length_and_value(n, length):
chars = 1
while True:
cnt = pow(length, chars)
if cnt > n:
return chars, n
chars += …Run Code Online (Sandbox Code Playgroud) 这应该很容易.
这是我的数组(相反,一种生成代表性测试数组的方法):
>>> ri = numpy.random.randint
>>> ri2 = lambda x: ''.join(ri(0,9,x).astype('S'))
>>> a = array([float(ri2(x)+ '.' + ri2(y)) for x,y in ri(1,10,(10,2))])
>>> a
array([ 7.99914000e+01, 2.08000000e+01, 3.94000000e+02,
4.66100000e+03, 5.00000000e+00, 1.72575100e+03,
3.91500000e+02, 1.90610000e+04, 1.16247000e+04,
3.53920000e+02])
Run Code Online (Sandbox Code Playgroud)
我想要一个字符串列表,其中'\n'.join(list_o_strings)将打印:
79.9914
20.8
394.0
4661.0
5.0
1725.751
391.5
19061.0
11624.7
353.92
Run Code Online (Sandbox Code Playgroud)
我想空间垫的左侧和右侧(但没有超过必要的).
如果小数点后面的所有内容,我想在小数点后面加零.
我不想要科学记谱法.
..我不想丢失任何有效数字.(在353.98000000000002中2表示不重要)
是的,很高兴想要..
Python 2.5 %g, %fx.x等等要么迷惑我,要么无法做到.我还没有尝试过import decimal.我看不出NumPy是这样做的(虽然,array.__str__和array.__repr__十进制对齐(但有时会返回科学).
哦,速度很重要.我在这里处理大阵列.
我目前的解决方案是:
似乎应该有一些现成的解决方案......(但不是必需的)
最佳建议失败,何时dtype是float64: …
我正在尝试使用Eclipse,Android SDK和Mercurial插件克隆Android项目.我可以通过这样做成功克隆它:文件 - >新建 - >项目 - >克隆现有的Mercurial存储库
但问题始于Eclipse似乎没有认识到它是一个Android项目.然后我可以右键单击该项目并:Android工具 - >转换为Android项目但我无法选择任何构建首选项,并且源文件夹图标不会被识别为包.我尝试添加一个新包,但Eclipse说该文件夹不是Java源文件夹.
我觉得存储库有问题,我克隆它的方式,或者Eclipse/Mercurial/Android SDK不能很好地协同工作.
显然,我是一个完整的新手,任何帮助/耐心都表示赞赏.有用教程的链接是受欢迎的,因为我找不到这些特定的工具集.
使用scipy interpolate.splprep函数获取参数的参数样条曲线u,但域u不是样条曲线的线积分,它是输入坐标的分段线性连接.我试过了integrate.splint,但这只是给了个人积分u.显然,我可以数字地整合一堆笛卡尔差分距离,但我想知道是否有闭合形式的方法来获得我忽略的样条或样条线段(使用scipy或numpy)的长度.
编辑:我正在寻找一种封闭形式的解决方案或一种非常快速的方式来收敛机器精度答案.我几乎放弃了数字根寻找方法,现在主要是在一个封闭形式的答案之后.如果任何人有任何集成椭圆函数的经验或者可以指向一个好的资源(除了Wolfram),那就太好了.
我将尝试使用Maxima来尝试获得我认为是样条曲线的一个段的函数的无限积分:我在MathOverflow上交叉发布了它
我有一个大的numpy数组:
array([[32, 32, 99, 9, 45], # A
[99, 45, 9, 45, 32],
[45, 45, 99, 99, 32],
[ 9, 9, 32, 45, 99]])
Run Code Online (Sandbox Code Playgroud)
以及特定顺序的大量唯一值数组:
array([ 99, 32, 45, 9]) # B
Run Code Online (Sandbox Code Playgroud)
我怎样才能快速(没有python词典,没有副本A,没有python循环)替换值, A以便成为B?中值的指示:
array([[1, 1, 0, 3, 2],
[0, 2, 3, 2, 1],
[2, 2, 0, 0, 1],
[3, 3, 1, 2, 0]])
Run Code Online (Sandbox Code Playgroud)
我觉得因为无法在头脑中做到这一点而感到非常愚蠢,也没有在文档中找到它.简单点!
这段代码:
import numpy as np
import cProfile
shp = (1000,1000)
a = np.ones(shp)
o = np.zeros(shp)
def main():
np.divide(a,1,o)
for i in xrange(20):
np.multiply(a,2,o)
np.add(a,1,o)
cProfile.run('main()')
Run Code Online (Sandbox Code Playgroud)
仅打印:
3 function calls in 0.269 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.269 0.269 <string>:1(<module>)
1 0.269 0.269 0.269 0.269 testprof.py:8(main)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Prof
iler' objects}
Run Code Online (Sandbox Code Playgroud)
我可以让 cProfile 与 numpy 一起工作来告诉我它对各种np.*调用进行了多少次调用以及在每个调用上花费了多少时间?
编辑
像 hpaulj 建议的那样单独包装每个 numpy 函数太麻烦了,所以我正在尝试这样的东西来临时包装许多或所有感兴趣的函数:
def …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Arduino与Arduino Ethernet Shield设置为服务器以理解GET和POST请求.我发现" Web服务器结构良好 ",并且可以对其进行修改以满足我的需求,但C++中已经存在一些非常轻量级的东西,并且可能已经常用于Arduinos和Arduinos以太网盾吗?
我有一个数组:
array([[ 4, 10],
[ 4, 2],
[ 0, 7],
[ 5, 11],
[ 6, 8],
[ 3, 6],
[ 9, 7],
[ 2, 11],
[ 9, 5],
[ 8, 1]])
Run Code Online (Sandbox Code Playgroud)
我想要一种方法来对值对进行排序,以便尽可能多的成对2元素集具有公共值.这是所需有序数组的示例:
array([[ 4, 10],
[ 4, 2],
[ 2, 11],
[ 5, 11],
[ 9, 5],
[ 9, 7],
[ 0, 7], #note the gap here:
[ 8, 1],
[ 6, 8],
[ 3, 6]])
Run Code Online (Sandbox Code Playgroud)
关于这些阵列有几个条件.没有重复对(即:[1,0]或[0,1]将出现在数组的其他位置,如果[0,1]已经存在).没有对具有相同的值(即:[1,1]将不存在).没有对将有两个以上的匹配(喵:在整个数组中没有值超过两次.)但是一对可以有零匹配(注意在上面的数组中没有匹配的间隙).
显然,我可以创建数组的每个排列,但这似乎是野蛮的.我认为可能有某种方法可以切割平台并以合理的方式重新堆叠,以便按照少量切割进行分类.但在我走这条路之前,我想:1)确保没有numpy或collections功能已经做到了这一点.2)知道没有棘手的天才方式来使用numpy .sort()(或类似的)来做到这一点.3)确定这是否是一项常见任务,并且有算法可以执行此操作.("哦,这是Blumen-Funke算法!")
以下是一些生成混洗测试数组并检查已排序数组的代码:
def shuffled(N=12, ans=1):
'''returns is …Run Code Online (Sandbox Code Playgroud) 我制作了两个文件:
#test_func.py
def test():
print('hello')
Run Code Online (Sandbox Code Playgroud)
和
#test_inspect.py
import inspect
import test_func
reload(inspect)
reload(test_func)
reload(inspect)
reload(test_func)
print inspect.getsource(test_func.test)
Run Code Online (Sandbox Code Playgroud)
import test_inspect从 IPython 或其他交互式 shell运行会打印正确的内容:
def test():
print('hello')
Run Code Online (Sandbox Code Playgroud)
但是如果我编辑并保存 test_func.py 为:
#test_func.py
def test():
print('good bye')
Run Code Online (Sandbox Code Playgroud)
我仍然得到:
def test():
print('hello')
Run Code Online (Sandbox Code Playgroud)
当我reload(test_inspect)从 shell运行时。如何说服inspect模块重新读取源文件?
(如果您必须知道我为什么要这样做,我会在评论中详细说明,但现在,我只想知道是否有解决方法,或者检查模块是否有一些基本的东西可以防止这个)
我试图创建一个不重新创建具有相同输入参数的对象的类.当我尝试使用与创建已存在对象相同的参数来实例化一个类时,我只希望我的新类返回一个指向已经创建的(昂贵创建的)对象的指针.这是我到目前为止所尝试的:
class myobject0(object):
# At first, I didn't realize that even already-instantiated
# objects had their __init__ called again
instances = {}
def __new__(cls,x):
if x not in cls.instances.keys():
cls.instances[x] = object.__new__(cls,x)
return cls.instances[x]
def __init__(self,x):
print 'doing something expensive'
class myobject1(object):
# I tried to override the existing object's __init__
# but it didnt work.
instances = {}
def __new__(cls,x):
if x not in cls.instances.keys():
cls.instances[x] = object.__new__(cls,x)
else:
cls.instances[x].__init__ = lambda x: None
return cls.instances[x]
def __init__(self,x):
print …Run Code Online (Sandbox Code Playgroud) 我总是喜欢这些:
not 'x' in 'abc'
not 'x' is 'a'
Run Code Online (Sandbox Code Playgroud)
(假设,当然每个人都知道in并且is优先考虑not- 我可能应该使用括号)而不是更多(英语)语法:
'x' not in 'abc'
'x' is not 'a'
Run Code Online (Sandbox Code Playgroud)
但是在我意识到他们没有语法意义之前,我没有理会为什么
'x' == not 'a'
'x' not == 'a'
Run Code Online (Sandbox Code Playgroud)
两者当然都会抛出语法错误.
所以我认为他们都是双字运营商.但是,该文档仅引用is not并未提及not in作为运算符.我是否可能误解了语法?
如果他们都是运营商,那么他们与非语法对手有什么不同(甚至是微妙的)?
如果它们是相同的,那么为什么它们存在?对于Python的禅似乎是不感兴趣的(..."一个 - 最好只有一个 - 显而易见的方式"......)
如果已经讨论过已经死亡,我很抱歉,我只是很难找到像"不是"这样的搜索词.
我不清楚如何提出这个问题.如果我这样做,我可能会更接近解决方案..我需要对继承有所了解.
我想制作一个自定义子类型float.但我想执行任何的正常浮动方法之前,这种亚型的实例,以重新评估其价值(__add__,__mul__,等).在这个例子中,它应该将其值乘以全局因子:
class FactorFloat(float):
# I don't think I want to do this:
## def __new__(self, value):
## return float.__new__(self, value)
def __init__(self, value):
float.__init__(self, value)
# Something important is missing..
# I want to do something with global FACTOR
# when any float method is called.
f = FactorFloat(3.)
FACTOR = 10.
print f # 30.0
print f-1 # 29.0
FACTOR = 2.
print f # 6.0
print f-1 # 5.0
Run Code Online (Sandbox Code Playgroud)
这是一个只是一个消毒的例子,我认为我的观点得到了解决.如有必要,我会发布更复杂的"真实"问题.