Python Numpy阵列:搜索子阵列
基本上,我有一堆numpy数组,每个数组都有一个较大数组中的网站列表。我想,通过用户的输入,基本上返回数组,其中用户的输入是数组的第一个元素。它将返回,用户将输入另一个网站,它将是数组中第一次匹配的第二个元素。例如:Python Numpy阵列:搜索子阵列,python,arrays,search,numpy,dictionary,Python,Arrays,Search,Numpy,Dictionary,基本上,我有一堆numpy数组,每个数组都有一个较大数组中的网站列表。我想,通过用户的输入,基本上返回数组,其中用户的输入是数组的第一个元素。它将返回,用户将输入另一个网站,它将是数组中第一次匹配的第二个元素。例如: bigarray = [['website1','website2', 'website3', 'website4'], ['website1', 'website7', 'website9', 'website3'], ['website1','website2','websit
bigarray = [['website1','website2', 'website3', 'website4'],
['website1', 'website7', 'website9', 'website3'],
['website1','website2','website5', 'website9','website24','website36']]
基本上,如果有人输入“website1”,它会返回
{'website2':2, 'website7':1}
之后,如果他们输入网站2,它将输出
{'website3':1,"website5":1}
等等。我希望我是清楚的,如果不是,请评论,我会说得更清楚。我不知道如何使这个过程高效快捷,我一直在集思广益,但我只能想出低效的方法。请帮忙
这是我到目前为止所拥有的,但它并没有提供频率词典。我不知道如何在字典中获取频率,也不知道如何获取第二、第三、第四等元素。这仅适用于第一个元素
import numpy as np
import cherrypy as cp
def initialize(self):
pagearray = np.load("pagearray.npy")
def submit(self, input):
for i in pagearray:
if input==i[0]:
subpagearray += [i[1:]]
possibilities +=i[0]
return possibilities
谢谢,
F
这是你制作字典的方法,但我不确定你要做什么,所以你可以用它作为模板
我想我知道你要干什么了。如果是这样,请告诉我:
def advanced_dict(a_list=None):
if a_list is None:
a_list = []
index_holder = 0 # Holds the primary dict value
site_dict = {} # contains a dict of dicts
for sub_arr in big_array:
for site in sub_arr:
try:
site_dict['website'+str(index_holder)]
except KeyError:
site_dict['website'+str(index_holder)] = {} # if no dict create dict
try:
site_dict['website'+str(index_holder)][site] += 1
except KeyError:
site_dict['website'+str(index_holder)][site] = 1
index_holder += 1
index_holder = 0
return site_dict
您可以使用更好地解决问题的数据结构。您可以在Python中找到一些选项。尽量避免过早优化,并尽可能简化代码 找到了答案。。。这就是我想要的:
import numpy as np
import simplejson as json
import cherrypy as cp
import operator
global pagearray
def initialize(self):
global pagearray
pagearray = np.load("pagearray.npy")
#return os.path
def getUserPath(self, input):
subpagearray = []
possibilities = []
global pagearray
for i in pagearray:
try:
if input==i[0]:
subpagearray += [i[1:]]
possibilities+= [i[1]]
except IndexError:
pass
x = build_dict(possibilities)
sorted_x = sorted(x.items(), key=operator.itemgetter(1), reverse=True)
pagearray = subpagearray
totalelements = len(pagearray)
returnvaluelist = []
weight = []
for i in sorted_x:
returnvaluelist += [i[0]]
weight += [(i[1]/(totalelements*1.0))*100]
return returnvaluelist, weight
def build_dict(a_list=None):
if a_list is None:
a_list = []
site_dict = {}
for site in a_list:
try:
site_dict[site] = site_dict[site] + 1
except KeyError:
site_dict[site] = 1
return site_dict
哦,不知道你必须发布你的尝试,我会很快更新。尝试部分不起作用。。。try语句中存在语法错误。我正在处理一个庞大的数据集,因此必须对其进行过早的优化:/n不确定这是否是最佳选择。我曾想过,但python似乎没有内置树数据类型。不,没有。不过,您可以找到一些实现,如本文所讨论的:
import numpy as np
import simplejson as json
import cherrypy as cp
import operator
global pagearray
def initialize(self):
global pagearray
pagearray = np.load("pagearray.npy")
#return os.path
def getUserPath(self, input):
subpagearray = []
possibilities = []
global pagearray
for i in pagearray:
try:
if input==i[0]:
subpagearray += [i[1:]]
possibilities+= [i[1]]
except IndexError:
pass
x = build_dict(possibilities)
sorted_x = sorted(x.items(), key=operator.itemgetter(1), reverse=True)
pagearray = subpagearray
totalelements = len(pagearray)
returnvaluelist = []
weight = []
for i in sorted_x:
returnvaluelist += [i[0]]
weight += [(i[1]/(totalelements*1.0))*100]
return returnvaluelist, weight
def build_dict(a_list=None):
if a_list is None:
a_list = []
site_dict = {}
for site in a_list:
try:
site_dict[site] = site_dict[site] + 1
except KeyError:
site_dict[site] = 1
return site_dict