如何解决numba嵌套列表中的唯一列表
我想在nopython numba函数的嵌套列表中找到唯一列表的数量,例如:
from collections import Counter
def number_of_unique_lists_v1(a):
uniques = Counter(tuple(item) for item in a)
number = len(uniques.keys())
return number
print(number_of_unique_lists_v1([[1,2,3],[1,2],[3,4],3])
>>> 3
或
def number_of_unique_lists_v2(a):
uniques = [list(x) for x in set(tuple(x) for x in a)]
number = len(uniques)
return number
print(number_of_unique_lists_v2([[1,3])
>>> 3
不幸的是,这两种想法都不适用于@ nb.njit。我该如何运作?
编辑 :
使用mpw2的方法,我发现原则上以下代码有效:
from numba.typed import List
@nb.njit
def number_of_unique_lists_v3():
a = [[1,3]]
s = List()
for x in a:
if not x in s:
s.append(x)
number = len(s)
return number
print(number_of_unique_lists())
>>> 3
但这对我不起作用,因为列表a
在我的函数中创建时稍有不同,类似于下面的最小示例所示。
from numba.typed import List
@nb.njit
def number_of_unique_lists():
a = [[0] for _ in range(4)]
a[0] = [1,3]
a[1] = [1,2]
a[2] = [3,4]
a[3] = [1,3]
s = List()
for x in a:
if not x in s:
s.append(x)
number = len(s)
return number
现在我收到一个我不明白的错误...
解决方法
这是使用numba.typed.List()对象的一种可行解决方案
irb(main):001:0> require 'csv'
=> false
irb(main):002:0> csv="name,value\n\r\nid,1"
irb(main):003:0> CSV::parse(csv)
Traceback (most recent call last):
16: from /usr/local/bin/irb:23:in `<top (required)>'
15: from /usr/local/bin/irb:23:in `load'
14: from /usr/local/lib/ruby/gems/2.7.0/gems/irb-1.2.3/exe/irb:11:in `<top (required)>'
13: from (irb):3
12: from /usr/local/lib/ruby/2.7.0/csv.rb:686:in `parse'
11: from /usr/local/lib/ruby/2.7.0/csv.rb:1289:in `read'
10: from /usr/local/lib/ruby/2.7.0/csv.rb:1289:in `to_a'
9: from /usr/local/lib/ruby/2.7.0/csv.rb:1280:in `each'
8: from /usr/local/lib/ruby/2.7.0/csv.rb:1280:in `each'
7: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:336:in `parse'
6: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:823:in `parse_quotable_loose'
5: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:49:in `each_line'
4: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:49:in `each_line'
3: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:52:in `block in each_line'
2: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:842:in `block in parse_quotable_loose'
1: from /usr/local/lib/ruby/2.7.0/csv/parser.rb:928:in `parse_quotable_robust'
CSV::MalformedCSVError (New line must be <"\n"> not <"\r"> in line 2.)
irb(main):004:0> CSV::parse(csv.gsub(/\r\n/,"\n"))
=> [["name","value"],[],["id","1"]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。