【问题标题】:Numpy Arrays: Searching for subarraysNumpy Arrays:搜索子数组
【发布时间】:2015-07-28 17:54:04
【问题描述】:

基本上,我有一堆 numpy 数组,每个数组都有一个更大数组中的网站列表。我想通过用户的输入,基本上返回用户输入是数组的第一个元素的数组。它将返回,用户将输入另一个网站,它将是第一次匹配的数组的第二个元素。比如:

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

【问题讨论】:

  • 哦,不知道你必须发布你的尝试,我会尽快更新。

标签: python arrays search numpy dictionary


【解决方案1】:

您可以使用更好地解决您的问题的数据结构。 Here 你可以在 Python 中找到一些选项。尽量避免过早优化,并尽可能保持代码更简单。

【讨论】:

  • 我正在处理一个巨大的数据集,所以过早的优化是必须的:/
  • 不确定这是否是最佳选择。我在想它,但似乎 python 没有内置树数据类型。
  • 不,它没有。你可以找到一些实现,就像这篇文章中讨论的那样:stackoverflow.com/questions/2482602/…
【解决方案2】:

想通了...这就是我想要的:

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

【讨论】:

    【解决方案3】:
    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
    

    这是您制作字典的方式,但我不确定您要做什么,因此您可以将其用作模板

    我想我知道你要做什么了。如果是这样,请告诉我:

    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
    

    【讨论】:

    • try 部分不起作用... try 语句中存在语法错误。
    猜你喜欢
    • 2012-10-22
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2016-07-31
    相关资源
    最近更新 更多