Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除numpy中的嵌套循环_Python_Numpy_Nested Loops - Fatal编程技术网

Python 删除numpy中的嵌套循环

Python 删除numpy中的嵌套循环,python,numpy,nested-loops,Python,Numpy,Nested Loops,我一直在编写一个程序,对一系列数字进行暴力检查,以寻找欧拉积木,但我提出的方法涉及到一个三重循环。由于嵌套的Python循环速度非常慢,我想知道是否有更好的方法使用numpy来创建我需要的值数组 #x=max side length of brick. User Input. for t in range(3,x): a=[];b=[];c=[]; for u in range(2,t): for v in range(1,u):

我一直在编写一个程序,对一系列数字进行暴力检查,以寻找欧拉积木,但我提出的方法涉及到一个三重循环。由于嵌套的Python循环速度非常慢,我想知道是否有更好的方法使用numpy来创建我需要的值数组

#x=max side length of brick. User Input.    
for t in range(3,x):
    a=[];b=[];c=[];
    for u in range(2,t):
        for v in range(1,u):
                a.append(t)
                b.append(u)
                c.append(v)
    a=np.array(a)
    b=np.array(b)
    c=np.array(c)
    ...
是否有更好的方法使用numpy命令生成数组af值

谢谢

例如: 如果x=10,当t=3时,我想得到:

a=[3]  
b=[2]     
c=[1]
第一次通过循环。之后,当t=4时:

a=[4, 4, 4]
b=[2, 3, 3]
c=[1, 1, 2]
第三次(t=5)我想要:

以此类推,最大边长约为5000左右

编辑:解决方案

a=array(3)
b=array(2)
c=array(1)
for i in range(4,x): #Removing the (3,2,1) check from code does not affect results.
    foo=arange(1,i-1)
    foo2=empty(len(foo))
    foo2.fill(i-1)
    c=hstack((c,foo))
    b=hstack((b,foo2))
    a=empty(len(b))
    a.fill(i)
    ...

现在工作速度快了很多倍。谢谢大家。

尝试使用。清空。填充(http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.fill.html)

有两种方法可能会有所帮助,但可能只适用于较大的x值。对于初学者,使用
xrange
而不是
range
,这将节省创建您不需要的列表的时间。您还可以创建正确长度的空numpy数组,并在运行时用值填充它们,而不是附加到列表,然后将其转换为numpy数组

我相信这段代码会起作用(现在没有python访问权限):


你能举一个输入值和期望输出的例子吗?这可能有助于找到正确的表达式。嵌套在3层深处的循环速度很慢,句号——不仅仅在Python中如此。这对a值有效,但对b和c值无效。我曾考虑过从数组开始,但我无法在numpy中使用.append()。还有什么等价物吗?还有,如果有的话,我每次都可以附加到b和c数组中,而不是覆盖每个循环并从头开始。hstack看起来应该可以在没有三重循环的情况下工作。谢谢
a=array(3)
b=array(2)
c=array(1)
for i in range(4,x): #Removing the (3,2,1) check from code does not affect results.
    foo=arange(1,i-1)
    foo2=empty(len(foo))
    foo2.fill(i-1)
    c=hstack((c,foo))
    b=hstack((b,foo2))
    a=empty(len(b))
    a.fill(i)
    ...
for t in xrange(3, x):
    size = (t - 2) * (t - 3)
    a = np.zeros(size)
    b = np.zeros(size)
    c = np.zeros(size)

    idx = 0
    for u in xrange(2,t):
        for v in xrange(1,u):
            a[idx] = t
            b[idx] = u
            c[idx] = v
            idx += 1