小编Nic*_* M.的帖子

Rails:获取来自数据库的对象的所有字段

假设我有一个Foo ActiveRecord带字段的模型foo_id,foo_name并且foo_description.

做完之后

@foo = Foo.find(1)
Run Code Online (Sandbox Code Playgroud)

有没有这样的方法model_fields:" @foo.model_fields()会返回数组:

["foo_id", "foo_name", "foo_description"] ?
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

ruby-on-rails

12
推荐指数
1
解决办法
1万
查看次数

Ruby中字符串字典中的快速模糊/近似搜索

我有一个50K到100K字符串的字典(最多可以有50多个字符),我试图找到一个给定的字符串是否在字典中具有一些"编辑"距离容差.(例如Levenshtein).在进行搜索之前,我很好地预先计​​算任何类型的数据结构.

我的目标是尽可能快地对该字典运行数千个字符串并返回最近的邻居.我会很好的只是得到一个布尔值,说明一个给定是否在字典中,如果有一个明显更快的算法这样做

为此,我首先尝试计算所有Levenshtein距离并采取最小值并且显然非常慢.所以我尝试在这篇文章的基础上实现Levenshtein Trie http://stevehanov.ca/blog/index.php?id=114

请参阅我的要点以重现基准:https://gist.github.com/nicolasmeunier/7493947

以下是我在机器上的一些基准测试:

编辑距离0(完美匹配)

Benchmark.measure { 10.times { dictionary.search(random_word, 0) } }
<Benchmark::Tms:0x007fa59bad8908 @label="", @real=0.010889, @cstime=0.0, @cutime=0.0, @stime=0.0, @utime=0.00999999999999801, @total=0.00999999999999801> 
Run Code Online (Sandbox Code Playgroud)

*编辑距离2,变得慢很多*

Benchmark.measure { 10.times { dictionary.search(random_word, 2) } }
<Benchmark::Tms:0x007fa58c9ca778 @label="", @real=3.404604, @cstime=0.0, @cutime=0.0, @stime=0.020000000000000018, @utime=3.3900000000000006, @total=3.4100000000000006>
Run Code Online (Sandbox Code Playgroud)

它从那里走下坡路,并且编辑距离大于2时变得非常慢.(每个测试字符串的平均值超过1秒).

我想知道如何/如果我可以显着加快这一点.如果现有的解决方案已经在ruby/gem中实现,我也不想重新发明轮子......

编辑1:在我的情况下,我希望我与字典匹配的大多数字符串不在那里.因此,如果有任何算法可以快速丢弃字符串,那可能会有所帮助.

谢谢,尼古拉斯

ruby algorithm performance fuzzy-search levenshtein-distance

8
推荐指数
2
解决办法
2226
查看次数

散列函数python中的family生成器

我正在寻找一个哈希函数族生成器,它可以在给定一组参数的情况下生成一系列哈希函数.到目前为止我还没有找到任何这样的发电机.有没有办法用hashlib包裹做到这一点?

例如,我想做的事情如下:

h1 = hash_function(1)
h2 = hash_function(2)
...
Run Code Online (Sandbox Code Playgroud)

并且h1h2将不同的散列函数.

对于那些可能了解它的人,我正在尝试在非常大的数据集上实现最小哈希算法.

基本上,对于给定的文档,我有一组非常大的特征(1亿到10亿),我需要为这组特征创建1000到10000个不同的随机排列.

我不想明确地构建随机排列,所以我想在下面使用的技术:

  1. 生成一个哈希函数h并考虑两个索引rs
  2. rs在排列之前出现if h(r) < h(s)和100到1000个不同的散列函数.

有没有我可能错过的已知图书馆?或者你可能知道使用python生成哈希函数族的任何标准方法?

python hash generator

7
推荐指数
1
解决办法
4360
查看次数

SVG rect vs div vs canvas

想象一下,为拥有3000间客房的大型楼宇平面图构建Google地图.

我需要显示多达3000个矩形(最好的也是能够渲染随机多边形,但此时,这不是最大的问题).它们中的每一个都应该附加事件,例如鼠标悬停和单击,这将对页面上的其他dom元素产生一些影响.我还需要能够放大和缩小.

我知道我可以用SVG(Raphael.js),普通div渲染或画布来做.

我想知道是否有人有具体的建议来为我想要建立的东西.它需要在最慢的浏览器上足够快地渲染(大约1秒左右).(IE8,Firefox 3.6,希望IE7,即使我没有做太多梦想......)

谢谢你的帮助,尼古拉斯.

PS:到目前为止,我经历过使用Raphael.js在IE8上渲染3000个矩形需要长达7秒,这相当慢.它似乎也比在IE8上渲染普通div快6倍.

html svg canvas raphael excanvas

6
推荐指数
1
解决办法
4548
查看次数

根据列值过滤numpy ndarray(矩阵)

这个问题是关于NumPy ndarray根据一些列值过滤a .

我有一个相当大NumPy ndarray(300000,50),我根据某些特定列中的值过滤它.我有,ndtypes所以我可以按名称访问每一列.

第一列被命名为category_code和我需要过滤矩阵只返回中行category_code("A", "B", "C").

结果将需要是另一个名称NumPy ndarray仍可访问其列的列dtype.

这是我现在所做的:

index = numpy.asarray([row['category_code'] in ('A', 'B', 'C') for row in data])
filtered_data = data[index]
Run Code Online (Sandbox Code Playgroud)

列表理解如:

list = [row for row in data if row['category_code'] in ('A', 'B', 'C')]
filtered_data = numpy.asarray(list)
Run Code Online (Sandbox Code Playgroud)

不行,因为dtypes我原来不再可以访问.

是否有更好/更多的Pythonic方法来实现相同的结果?

可能看起来像的东西:

filtered_data = data.where({'category_code': ('A', 'B','C'})
Run Code Online (Sandbox Code Playgroud)

谢谢!

python numpy matrix

6
推荐指数
1
解决办法
6850
查看次数

为什么在Objective-C的函数定义中使用(__weak Class)?

我有一个工厂类,它构建了我定义的不同类型的UITableViewCell,让我们调用它们:TypeATableViewCell和TypeBTableViewCell.

现在我的工厂类中的方法定义如下:

+ (UITableViewCell*)getCellForIdentifier:(NSString*)identifier cellClass:(__weak Class)cellClass;

为什么有人会在这里选择使用(__weak Class)而不是(Class).

谢谢,尼古拉斯

objective-c uitableview ios

6
推荐指数
1
解决办法
277
查看次数

Clojure Leining REPL OutOfMemoryError Java堆空间

我正在尝试使用以下方法解析一个相当小的(<100MB)xml文件:

(require '[clojure.data.xml :as xml]
         '[clojure.java.io :as io])

(xml/parse (io/reader "data/small-sample.xml"))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

OutOfMemoryError Java heap space
    clojure.lang.Numbers.byte_array (Numbers.java:1216)
    clojure.tools.nrepl.bencode/read-bytes (bencode.clj:101)
    clojure.tools.nrepl.bencode/read-netstring* (bencode.clj:153)
    clojure.tools.nrepl.bencode/read-token (bencode.clj:244)
    clojure.tools.nrepl.bencode/read-bencode (bencode.clj:254)
    clojure.tools.nrepl.bencode/token-seq/fn--3178 (bencode.clj:295)
    clojure.core/repeatedly/fn--4705 (core.clj:4642)
    clojure.lang.LazySeq.sval (LazySeq.java:42)
    clojure.lang.LazySeq.seq (LazySeq.java:60)
    clojure.lang.RT.seq (RT.java:484)
    clojure.core/seq (core.clj:133)
    clojure.core/take-while/fn--4236 (core.clj:2564)
Run Code Online (Sandbox Code Playgroud)

这是我的project.clj:

(defproject dats "0.1.0-SNAPSHOT"
  ...
  :dependencies [[org.clojure/clojure "1.5.1"]
                [org.clojure/data.xml "0.0.7"]
                [criterium "0.4.1"]]
  :jvm-opts ["-Xmx1g"])
Run Code Online (Sandbox Code Playgroud)

我尝试在.bash_profile中设置LEIN_JVM_OPTS和JVM_OPTS失败。

当我尝试以下project.clj时:

(defproject barber "0.1.0-SNAPSHOT"
  ...
  :dependencies [[org.clojure/clojure "1.5.1"]
                [org.clojure/data.xml "0.0.7"]
                [criterium "0.4.1"]]
  :jvm-opts ["-Xms128m"])
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error occurred during initialization of VM
Incompatible minimum and maximum …
Run Code Online (Sandbox Code Playgroud)

clojure out-of-memory xml-parsing clojure-java-interop

5
推荐指数
1
解决办法
2645
查看次数

Ruby 中哈希的线程安全

我对 Ruby 中哈希值的线程安全性感到好奇。从控制台运行以下命令(Ruby 2.0.0-p247):

h = {}
10.times { Thread.start { 100000.times {h[0] ||= 0; h[0] += 1;} } }
Run Code Online (Sandbox Code Playgroud)

回报

{0=>1000000}
Run Code Online (Sandbox Code Playgroud)

这是正确的期望值。

为什么它有效?我可以依靠此版本的 Ruby 实现线程安全的哈希值吗?

编辑:测试100次:

counter = 0
100.times do
  h={}
  threads = Array.new(10) { Thread.new { 10000.times { h[0] ||= 0; h[0] += 1 } } }
  threads.map { |thread| thread.join }
  counter += 1 if h[0] != 100000
end
puts counter
Run Code Online (Sandbox Code Playgroud)

计数器最后还是0。我尝试了多达 10K 次,并且这段代码从未出现过任何线程安全问题。

ruby multithreading hashmap thread-safety

5
推荐指数
1
解决办法
5607
查看次数

用于SOAP处理的Java与Ruby

我需要在使用Ruby与Java进行SOAP集成之间做出决定.我的整个Web应用程序都是基于Ruby on Rails构建的,并且有一个重要的后端组件必须使用SOAP与遗留系统集成.

Java拥有广泛的SOAP库,如Apache Axis,似乎可以很好地与这种"遗留"Web服务集成,而Ruby有一些像Savon和handSOAP这样的宝石.

我偏向于使用Ruby库,但我担心性能/可伸缩性问题.使用Ruby附带的性能/可伸缩性问题是什么?

为了获得更多上下文,与遗留系统的集成有两个组成部分:日常流程,其性能不太重要;以及实时查询引擎,其性能非常重要,因为用户在处理查询时正在等待.

ruby java axis soap savon

4
推荐指数
1
解决办法
830
查看次数

flickr宝石轨道3

在您看来,与Rails 3兼容的Flickr API的最佳宝石是什么?

我只需要一些基本功能来根据给定大小的网页网址检索一些照片.

谢谢你,尼古拉斯.

flickr ruby-on-rails ruby-on-rails-3

3
推荐指数
1
解决办法
2642
查看次数