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