Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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循环的速度?_Python_Numpy - Fatal编程技术网

有没有办法加快Python循环的速度?

有没有办法加快Python循环的速度?,python,numpy,Python,Numpy,我有一个二维np数组,它的列数是行数的100倍。例如,如果行数为1000,列数为100000,值均为整数。我的目标是为1000行索引中的每一行返回1000个唯一整数。列中的值并非都是唯一的(可能存在重复值),因此我必须搜索每行中的所有值,以拾取前一个操作中尚未拾取的行中的第一个整数值。我有一个可复制的循环,它可以很好地用于约1000个较小的num_行。但是当处理超过10000行时,这是非常缓慢的。有没有更有效的方法来解决这个问题 import numpy as np maxval = 5000

我有一个二维np数组,它的列数是行数的100倍。例如,如果行数为1000,列数为100000,值均为整数。我的目标是为1000行索引中的每一行返回1000个唯一整数。列中的值并非都是唯一的(可能存在重复值),因此我必须搜索每行中的所有值,以拾取前一个操作中尚未拾取的行中的第一个整数值。我有一个可复制的循环,它可以很好地用于约1000个较小的num_行。但是当处理超过10000行时,这是非常缓慢的。有没有更有效的方法来解决这个问题

import numpy as np
maxval = 5000
matrix = np.random.randint(maxval,size=(maxval, maxval*100))
neighbours = maxval - 1
indices = [] #this array will contain the outputs after the loop gets completed
for e in matrix:
    i = 0
    while i < neighbours:
        if e[i] in indices:
            i += 1
        else:
            indices.append(e[i])
            break 
将numpy导入为np
最大值=5000
矩阵=np.random.randint(maxval,size=(maxval,maxval*100))
邻居=最大值-1
索引=[]#循环完成后,此数组将包含输出
对于矩阵中的e:
i=0
而我:
如果指数中的e[i]:
i+=1
其他:
附加索引(e[i])
打破

您可以使用
集合而不是列表进行查找:

import numpy as np
maxval = 50
matrix = np.random.randint(maxval,size=(maxval, maxval*100))
neighbours = maxval - 1
indices = set() #this array will contain the outputs after the loop gets completed
for e in matrix:
    i = 0
    while i < neighbours:
        if e[i] in indices:
            i += 1
        else:
            indices.add(e[i])
            break 
将numpy导入为np
最大值=50
矩阵=np.random.randint(maxval,size=(maxval,maxval*100))
邻居=最大值-1
index=set()#循环完成后,此数组将包含输出
对于矩阵中的e:
i=0
而我:
如果指数中的e[i]:
i+=1
其他:
加上(e[i])
打破

这里有一个

您可以使用一个
集合
而不是列表进行查找:

import numpy as np
maxval = 50
matrix = np.random.randint(maxval,size=(maxval, maxval*100))
neighbours = maxval - 1
indices = set() #this array will contain the outputs after the loop gets completed
for e in matrix:
    i = 0
    while i < neighbours:
        if e[i] in indices:
            i += 1
        else:
            indices.add(e[i])
            break 
将numpy导入为np
最大值=50
矩阵=np.random.randint(maxval,size=(maxval,maxval*100))
邻居=最大值-1
index=set()#循环完成后,此数组将包含输出
对于矩阵中的e:
i=0
而我:
如果指数中的e[i]:
i+=1
其他:
加上(e[i])
打破

这里有一个不是一个简单的方法,但是如果
行有100000个元素,那么

import random

random.sample(set(row), 1000)
是从中随机抽取的1000个独特元素

注:

  • 如果一个数字出现的频率比另一个高很多,那么它们仍然有相同的被选中的机会
  • 如果唯一值的数量小于1000,则会引发ValueError
  • 我不知道,可能存在一个与两者相当的numpy

不是一种简单的方式,但是如果
有100000个元素,那么

import random

random.sample(set(row), 1000)
是从中随机抽取的1000个独特元素

注:

  • 如果一个数字出现的频率比另一个高很多,那么它们仍然有相同的被选中的机会
  • 如果唯一值的数量小于1000,则会引发ValueError
  • 我不知道,可能存在一个与两者相当的numpy

    • 使用字典会快得多,但我不知道是否足够:

      from collections import OrderedDict
      
      indx = OrderedDict()
      
      for e in matrix:
          i = 0
          while i < neighbours:
              v = e[i]
              if indx.get(v) is None:
                  indx[v] = True
                  break
              i += 1
      
      results = list(indx.keys())
      
      
      从集合导入订单数据
      indx=OrderedDict()
      对于矩阵中的e:
      i=0
      而我:
      v=e[i]
      如果indx.get(v)为无:
      indx[v]=真
      打破
      i+=1
      结果=列表(indx.keys())
      
      使用字典会快得多,但我不知道是否足够:

      from collections import OrderedDict
      
      indx = OrderedDict()
      
      for e in matrix:
          i = 0
          while i < neighbours:
              v = e[i]
              if indx.get(v) is None:
                  indx[v] = True
                  break
              i += 1
      
      results = list(indx.keys())
      
      
      从集合导入订单数据
      indx=OrderedDict()
      对于矩阵中的e:
      i=0
      而我:
      v=e[i]
      如果indx.get(v)为无:
      indx[v]=真
      打破
      i+=1
      结果=列表(indx.keys())
      
      快速修复—要使代码运行更快,请使用
      集合
      进行索引,至少用于搜索(
      如果索引中的e[i]
      ),如果每行的唯一元素数超过1000怎么办?另外,如果小于1000,那么每行将有不同数量的唯一的。输出格式必须是什么?快速修复使您的代码运行更快,请使用
      集合
      进行索引,至少用于搜索(
      如果索引中的e[i]
      ),如果每行的唯一元素数超过1000怎么办?另外,如果小于1000,那么每行将有不同数量的唯一的。输出格式必须是什么?