标签: processing-efficiency

从字符串中删除常用单词(及其复数版本)的技巧

我试图通过解析一长串文本来找到食谱的标签(关键字).该文本包含配方成分,方向和简短的模糊.

您认为从标签列表中删除常用单词的最有效方法是什么?

用常用词来说,我的意思是:'the','at','there','their'等等.

我有两种我可以使用的方法,你认为它们在速度方面更有效率,你知道我能做到这一点的更有效的方法吗?

方法1:
- 确定每个单词出现的次数(使用库集合)
- 有一个常用单词列表,并通过尝试从Collection对象中删除该键来删除Collection对象中的所有"公共单词"(如果存在).
- 因此速度将由变量delims的长度决定

import collections from Counter
delim     = ['there','there\'s','theres','they','they\'re'] 
# the above will end up being a really long list!
word_freq = Counter(recipe_str.lower().split())
for delim in set(delims):
    del word_freq[delim]
return freq.most_common()
Run Code Online (Sandbox Code Playgroud)

方法2:
- 对于可以是复数的常用单词,查看配方字符串中的每个单词,并检查它是否部分包含公共单词的非复数形式.例如; 对于字符串"有一个测试",检查每个单词以查看它是否包含"那里"并删除它(如果有).

delim         = ['this','at','them'] # words that cant be plural
partial_delim = ['there','they',] # words that could occur in many forms
word_freq     = Counter(recipe_str.lower().split())
for delim in set(delims):
    del word_freq[delim]
# really slow 
for delim in set(partial_delims): …
Run Code Online (Sandbox Code Playgroud)

python parsing processing-efficiency

16
推荐指数
2
解决办法
2万
查看次数

Laravel渴望加载vs显式连接

这可能听起来像一个显而易见的问题,但我只想得到一些保证.

使用Laravel的急切加载功能,根据我的理解,它将创建两个查询以返回相关结果的完整列表(例如,如果您正在使用两个表).但是,如果我错了,请纠正我,使用join语句只会留下一个查询,这样可以减少往返服务器数据库(MySQL)的次数,并且查询效率更高.

我知道你可以在Laravel中编写连接查询,这很好,所以问题是:我不正确地假设当从两个或多个表中检索相关数据时,我是否应该打扰急切加载而只是编写我自己的连接声明?

******编辑*******

回到这一年后,我个人认为,只需编写查询,原始并写好.

mysql performance join processing-efficiency laravel

16
推荐指数
1
解决办法
3677
查看次数

如何找出我的代码中哪些部分在Python中效率低下

在上一个问题中,我问过多处理,使用多个内核使程序运行得更快,有人告诉我:

通常情况下,使用更好的代码可以获得100x +优化,而使用多处理可以获得4倍的改进和额外的复杂性

然后他们建议我应该:

使用分析器来了解什么是慢,然后专注于优化.

所以我回答了这个问题:你如何描述一个脚本?

在这里,我发现cProfile并将其实现到一些测试代码中,以了解它是如何工作的.

这是我的代码:

import cProfile

def foo():
    for i in range(10000):
        a = i**i
        if i % 1000 == 0:
            print(i)

cProfile.run('foo()')
Run Code Online (Sandbox Code Playgroud)

然而,在运行之后,这就是我得到的:

0
1000
2000
3000
4000
5000
6000
7000
8000
9000
         1018 function calls in 20.773 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   20.773   20.773 <string>:1(<module>)
      147    0.000    0.000    0.000    0.000 rpc.py:150(debug)
       21    0.000    0.000    0.050    0.002 rpc.py:213(remotecall)
       21    0.000    0.000    0.002    0.000 …
Run Code Online (Sandbox Code Playgroud)

python performance profiling processing-efficiency python-3.x

16
推荐指数
1
解决办法
5564
查看次数

SQL通配符搜索 - 效率?

最近在使用LIKE和通配符搜索MS SQL数据库的最有效方法上进行了辩论.我们使用的比较%abc%,%abcabc%.有人说你应该在学期末(abc%)结束时使用通配符.因此,根据他们的说法,如果我们想要找到以"abc"结尾的东西,那么使用`reverse(column)LIKE reverse('%abc')是最有效的.

我使用SQL Server 2008(R2)设置了一个测试来比较以下每个语句:

select * from CLMASTER where ADDRESS like '%STREET'
select * from CLMASTER where ADDRESS like '%STREET%'   
select * from CLMASTER where ADDRESS like reverse('TEERTS%')  
select * from CLMASTER where reverse(ADDRESS) like reverse('%STREET')
Run Code Online (Sandbox Code Playgroud)

CLMASTER拥有大约500,000条记录,大约有7,400个地址以"Street"结尾,大约8,500个地址包含"Street",但不一定在最后.每次测试运行花了2秒钟,他们都返回了相同数量的行,除了%STREET%,它发现额外的900左右的结果,因为它拾取了最后有公寓号的地址.

由于SQL Server测试没有显示执行时间的任何差异,我移动到PHP,我使用以下代码,切换每个语句,快速运行多个测试:

<?php

    require_once("config.php");
    $connection = odbc_connect( $connection_string, $U, $P );

    for ($i = 0; $i < 500; $i++) {
    $m_time = explode(" ",microtime());
    $m_time = $m_time[0] + $m_time[1]; …
Run Code Online (Sandbox Code Playgroud)

sql sql-server query-optimization processing-efficiency sql-server-2008

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

使用环回地址使用TCP/IP套接字进行IPC时,常见的网络堆栈是否会跳过较低级别PDU中的消息框架?

在某些环境(如Java)中,使用TCP/IP套接字使用"localhost"地址(IPv4中为127.0.0.1或IPv6中为:: 1)在同一主机上的进程之间传递消息是很自然的.(因为Java倾向于不在其API中公开其他IPC机制).

显然,通过管道传递消息或使用共享内存的IPC,这可能比IPC慢得多.

另一方面,如果TCP/IP网络堆栈意识到连接的两端都在环回接口上,那么它可能能够进行一些优化,这样效率可能与使用管道没有太大差别.

但是,常见的操作系统(Windows,Linux)是否在其TCP/IP堆栈中实现了这样的优化?

sockets tcp localhost processing-efficiency interprocess

13
推荐指数
2
解决办法
8421
查看次数

如何从Swift中的一系列图像中有效地创建多行照片拼贴

问题

我正在构建一系列照片拼贴画,这些照片是我放在桌面视图上的.当图像数量达到tableview单元格宽度的边界时,我想让图像换行(这样我就可以在拼贴中显示图像行).目前我得到一排.如果需要其他信息,请随时告知.我很可能不会以最有效的方式接近这一点,因为随着阵列中使用的图像数量开始增加而存在延迟.(对此的任何反馈将非常感激).

Nota Bene

我正在创建拼贴图像.它实际上是一个图像.我想通过在内存中创建一个有效的列和行矩阵来安排拼贴 .然后我用图像填充这些图像.最后,我对生成的图像进行快照,并在需要时使用它.算法写入效率不高,只产生一行图像.我需要一个轻量级替代下面使用的算法.在这种情况下,我不相信UICollectionView会是一个有用的替代品.

伪代码

  1. 给定一组图像和一个目标矩形(表示目标视图)
  2. 获取阵列中的图像数量与每行允许的最大数量
  3. 定义一个适当大小的较小矩形来保存图像(以便每行填充目标矩形,即 - 如果一个图像然后填充该行;如果是9个图像那么应该完全填充该行;如果10个图像具有最大值每行9个图像然后第10个开始第二行)
  4. 迭代收集
  5. 将每个矩形从左到右放置在正确的位置,直到达到最后一个图像或每行最大数量; 继续下一行,直到所有图像都适合目标矩形
  6. 当达到每行的最大图像数时,放置图像并设置下一个矩形以显示在连续的行上

使用:Swift 2.0

class func collageImage (rect:CGRect, images:[UIImage]) -> UIImage {

        let maxSide = max(rect.width / CGFloat(images.count), rect.height / CGFloat(images.count))

        UIGraphicsBeginImageContextWithOptions(rect.size, false, UIScreen.mainScreen().scale)

        var xtransform:CGFloat = 0.0

        for img in images {
            let smallRect:CGRect = CGRectMake(xtransform, 0.0,maxSide, maxSide)
            let rnd = arc4random_uniform(270) + 15
            //draw in rect
            img.drawInRect(smallRect)
            //rotate img using random angle.
            UIImage.rotateImage(img, radian: CGFloat(rnd))
            xtransform += CGFloat(maxSide * 0.8)
        }

        let …
Run Code Online (Sandbox Code Playgroud)

performance processing-efficiency ios swift

13
推荐指数
1
解决办法
3968
查看次数

C++字符串访谈问题

我最近在C++技术面试中,给了我一些简单的字符串操作代码,它用于获取一个字符串并返回一个由第一个和最后一个n字符组成的字符串,然后继续纠正任何错误,并使功能尽可能高效,我想出了下面的解决方案,但面试官声称有一个更快,更优化的方式:

原始代码:

std::string first_last_n(int n, std::string s)
{
   std::string first_n = s.substr(0,n);
   std::string last_n = s.substr(s.size()-n-1,n);
   return first_n + last_n;
}
Run Code Online (Sandbox Code Playgroud)

我的代码:

bool first_last_n(const std::size_t& n, const std::string& s, std::string& r)
{
   if (s.size() < n)
      return false;
   r.reserve(2 * n);
   r.resize(0);
   r.append(s.data(),s.data() + n);
   r.append(s.data() + (s.size() - n), s.data() + s.size());
   return true;
}
Run Code Online (Sandbox Code Playgroud)

我的更改摘要:

  • 更改接口以获取返回字符串作为参考(假设RVO和rvalues尚不可用)

  • 删除了通过substr构造的临时字符串

  • 将输入字符串作为const引用传递,以便绕过输入的临时实例化

  • 修复了last_n字符串中的off-by-1错误

  • 减少每个角色被触及一次或两次的次数(在重叠场景的情况下)

  • 在字符串s的大小小于n的情况下放置一个检查,对于失败返回false.

假设只允许本机C++,是否有其他方法可以更有效或最佳地完成上述操作?

注1:不修改原始输入字符串实例.

注2:所有解决方案必须通过以下测试用例,否则它们无效.

void test()
{
   {
      std::string s = "0123456789";
      std::string r = first_last_n(10,s); …
Run Code Online (Sandbox Code Playgroud)

c++ string optimization processing-efficiency

12
推荐指数
2
解决办法
4083
查看次数

替代在C++中使用%运算符和/运算符

有人告诉我,模运算符"%"和除运算符"/"在嵌入式C++中效率很低.

我怎样才能实现以下表达式:

a = b % c;
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用以下逻辑来实现:

a = b - c;
while (a >= c) {
  a = a - c;
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是,与%运算符相比,这个代码涉及while循环是否足够有效?

谢谢,Kirti

c++ modulo processing-efficiency

11
推荐指数
3
解决办法
8735
查看次数

如何在单机上运行Hadoop?

我可以在HDD上访问运行​​Linux的计算机,该计算机具有20个内核,92 GB RAM和100 GB存储空间.我想将Hadoop用于涉及大量数据的任务(超过1M字,超过1B字组合).伪分布式模式或完全分布式模式是在单台计算机上利用Hadoop功能的最佳方式吗?

对于我对Hadoop的预期用途,遇到数据丢失并因节点故障而不得不重新运行作业不是大问题.

涉及Linux容器的此项目使用完全分布式模式.本文介绍伪分布式模式; 更多细节可以在这里找到.

parallel-processing hadoop virtual-machine processing-efficiency linux-containers

10
推荐指数
2
解决办法
2142
查看次数

Array和Binary搜索树在效率上有什么区别?

我想知道什么是最好的:数组或二进制搜索树(插入,删除,查找最大和最小)以及如何改进它们?

arrays algorithm processing-efficiency binary-search-tree

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