草庐IT

python - 将 numpy 结构化数组的字段插入 mongodb

coder 2023-11-06 原文

我目前正在研究是否可以使用 structured numpy arrays或多或少直接作为 mongodb 插入操作的文档。

在我找到的所有例子中

db.collection.insert(doc)

doc 始终是 Python dict,但我想知道是否没有提供 mapping interface 的实例可能可用于插入操作。

我正在考虑使用 DictMixin 对 np.ndarray 进行子类化或 MutableMapping所以它真的提供了一个dict接口(interface)。然后做这样的事情:

structured_array = np.zeros( (5,), dtype=[('i', '<i4'), ('f', '<f4')] )
structured_array['i'] = np.random.randint(42, size=5)
structured_array['f'] = np.random.rand(5)

for row in structured_array:
    # row is of type: np.void
    # so in order to let pymongo insert it into the DB, I create a 
    # view of row, which provides the dict-like interface
    row_dict_like = row.view(np_array_subclass_providing_dict_interface)
    db.collection.insert(row_dict_like)

现在,因为我是一个该死的初学者,从来没有对 np.ndarray 进行子类化,我担心我可能会花很多时间在这上面,只是为了以后才知道,整个方法不是很聪明,我的问题是: 您认为这种方法存在主要问题吗?它是 Pythonic 的吗?我的假设是,任何提供映射接口(interface)的类都可以用于 mongodb 插入操作,是否完全正确?

最佳答案

毫无疑问,您的问题值得一个“纯粹”的 python/numpy-only 答案,我相信其他人会提供这个答案。但是:

我想指出的是,在您发现 numpy 的界面繁琐和/或不直观的许多情况下,使用 pandas 可以让您的生活更轻松。

在您的示例中,利用 pandas 的一种方法是创建一个 DataFrame,然后使用 iterrows() 遍历其行。每行都是一个(或多或少)类似字典的对象。

import pandas as pd

df = pd.DataFrame.from_records(structured_array)
for i, row in df.iterrows():
    print row.iteritems()
[('i', 14.0), ('f', 0.099248834)]
[('i', 31.0), ('f', 0.69031882)]
[('i', 32.0), ('f', 0.85714084)]
[('i', 14.0), ('f', 0.64561093)]
[('i', 8.0), ('f', 0.18835814)]

for i, row in df.iterrows():
    print dict(row)
{'i': 14.0, 'f': 0.099248834}
{'i': 31.0, 'f': 0.69031882}
{'i': 32.0, 'f': 0.85714084}
{'i': 14.0, 'f': 0.64561093}
{'i': 8.0, 'f': 0.18835814}

但是,您可能需要考虑重构代码以开始使用 DataFrame,这比 recarray 更直观。

当然,这需要你安装pandas,一般强烈推荐。

关于python - 将 numpy 结构化数组的字段插入 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323054/

有关python - 将 numpy 结构化数组的字段插入 mongodb的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  4. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  5. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  6. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  7. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  8. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  9. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  10. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

随机推荐