标签: processing-efficiency

优化代码以提高效率

我创建了代码,根据欧几里德距离执行从一个向量到另一个向量的点映射,并检查它是否正常工作.

然而,这需要花费太多时间.基本上我已经为A和B向量的欧氏距离创建了一个矩阵,并找到了它的最小值.在我表示这些点的映射后,我通过将它们标记为NaN来删除欧几里德矩阵中的行和列,以便进行下一个映射.

这段代码可以更高效,因为它现在非常慢

Euclid = distance(A,B); % calculates euclid distance column v/s column wise. 
for var = 1 : value
    %# finds the min of Euclid and its position, when Euclid is viewed as a 1D array
    [~, position] = min(Euclid(:)); 

    %#transform the index in the 1D view to 2 indices
    [i,j] = ind2sub(size(Euclid),position);

    %display(strcat(num2str(i),32, num2str(j)));

    mapping = [A(1,i) A(2,i) B(1,j) B(2,j)];
    fprintf(FID,'%d %d %d %d\n', mapping );

    Euclid( i , : ) = NaN;
    Euclid( : , j ) …
Run Code Online (Sandbox Code Playgroud)

algorithm performance matlab processing-efficiency

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

数据库查询 vs java 处理

用一些java处理进行两次数据库调用还是一次数据库调用更好?

一个数据库调用只获取相关数据,这些数据将被分成两个不同的列表,这需要几行 java。

java sql database algorithm processing-efficiency

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

如何在R中优化sapply以计算数据帧上的运行总计

我在R中编写了一个函数来计算按月数计算的累计总数,但是随着数据集变大,我的方法的执行时间呈指数级增长.我是新手R程序员,你能帮我提高效率吗?
函数和我调用函数的方式:

accumulate <- function(recordnum,df){
    sumthese <- (df$subject == df$subject[recordnum]) &
        (df$month <= df$month[recordnum])
    sum(df$measurement[sumthese])
}
set.seed(42)
datalength = 10
df <- data.frame(measurement = runif(1:datalength),
                 subject=rep(c("dog","cat"),each =datalength/2),
                 month=rep(seq(datalength/2,1,by=-1)))
system.time(df$cumulative <- sapply(1:datalength,accumulate,df))
Run Code Online (Sandbox Code Playgroud)

输入数据帧:

> df
   measurement subject month
1    0.4577418     dog     5
2    0.7191123     dog     4
3    0.9346722     dog     3
4    0.2554288     dog     2
5    0.4622928     dog     1
6    0.9400145     cat     5
7    0.9782264     cat     4
8    0.1174874     cat     3
9    0.4749971     cat     2
10   0.5603327     cat     1
Run Code Online (Sandbox Code Playgroud)

输出数据帧: …

performance r processing-efficiency dataframe sapply

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

搜索可枚举的最有效方法

我正在编写一个小程序,它接收一个.csv文件作为输入,大约有45k行.我试图将此文件的内容与数据库中的表的内容进行比较(SQL Server通过动态CRM使用Xrm.Sdk,如果它有所不同).

在我当前的程序中(大约需要25分钟进行比较 - 文件和数据库在这里完全相同,只有45k行没有差异),我拥有数据库中的所有现有记录,DataCollection<Entity>其继承Collection<T>IEnumerable<T>

在我的下面的代码中,我使用该Where方法进行过滤,然后根据匹配计数进行逻辑.这Where似乎是瓶颈.有没有比这更有效的方法?我绝不是LINQ专家.

foreach (var record in inputDataLines)
{
    var fields = record.Split(',');

    var fund = fields[0];
    var bps = Convert.ToDecimal(fields[1]);
    var withdrawalPct = Convert.ToDecimal(fields[2]);
    var percentile = Convert.ToInt32(fields[3]);
    var age = Convert.ToInt32(fields[4]);
    var bombOutTerm = Convert.ToDecimal(fields[5]);

    var matchingRows = existingRecords.Entities.Where(r => r["field_1"].ToString() == fund
                                      && Convert.ToDecimal(r["field_2"]) == bps
                                      && Convert.ToDecimal(r["field_3"]) == withdrawalPct
                                      && Convert.ToDecimal(r["field_4"]) == percentile
                                      && Convert.ToDecimal(r["field_5"]) == age);

    entitiesFound.AddRange(matchingRows);

    if (matchingRows.Count() == 0)
    {
        rowsToAdd.Add(record); …
Run Code Online (Sandbox Code Playgroud)

c# linq performance dynamics-crm processing-efficiency

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

在Perl中分裂很长音译的效率

我有这么长的音译:

$text =~ tr/áà?â?å?ä?ã???????????????ç??????ð????éè?ê?ë????????/aaaaaaaaaaaaaaaaabbbbcccccccccdddddddeeeee/;
# Etc. (About 400 chars)
Run Code Online (Sandbox Code Playgroud)

我想将它分成几个音译,因为生成的代码更容易维护:

$text =~ tr/áà?â?å?ä?ã???????/aaaaaaaaaaaaaaaaa/;
$text =~ tr/????/bbbb/;
$text =~ tr/????ç????/ccccccccc/;
# Etc.
Run Code Online (Sandbox Code Playgroud)

我相信这会让事情变得缓慢,但我想肯定地知道.此过程在非常繁忙的服务器上每秒运行大约1000次.

谢谢.

perl performance transliteration processing-efficiency

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

使用枚举时的高效switch语句

我有一个枚举和一个switch语句使用一些枚举条目,但不是全部,它们目前也是乱序,即我有以下内容:

enum prot_tun_stat_e    {
    STAT_A = 0,     
    STAT_B,     
    STAT_C, 
    STAT_D,
    STAT_E,
    STAT_F, //5
    STAT_G,
    STAT_H,
    STAT_I,
    STAT_Y,
    STAT_K,     //10
    STAT_COUNT      //must be last
} __attribute__((packed));
Run Code Online (Sandbox Code Playgroud)

然后我使用以下条目切换:

switch(var) {
case C:
break;
case D:
break
case F:
break
case G:
break
default
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否更好地重新安排了枚举中的项目C=1,D=2,F=3&G=4?这会更有效吗?

谢谢,罗恩

平台:PowerPC,编译器diab

c enums processing-efficiency switch-statement

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

如何有效地比较Python中的大型列表?

我试图找到9个字母的单词,当你平均分成3个部分,然后乱七八糟地,你会得到另一个9个字母的单词.

for i in nineWordList:
    for j in nineWordList:
        if (i[3:5] + i[0:2] + i[6:8]) == j:
            correctWords.append(i)
        elif (i[3:5] + i[6:8] + i[0:2]) == j:
            correctWords.append(i)
        elif (i[0:2] + i[6:8] + i[3:5]) == j:
            correctWords.append(i)
        elif (i[6:8] + i[0:2] + i[3:5]) == j:
            correctWords.append(i)
        elif (i[6:8] + i[3:5] + i[0:2]) == j:
            correctWords.append(i)
Run Code Online (Sandbox Code Playgroud)

我就是这样做的.唯一的问题是nineWordList长68,000个元素,这需要很长时间.我怎样才能提高它,使其更有效率?

python algorithm list processing-efficiency

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

在熊猫中获取组名的有效方法

我有一个约有300,000行的.csv文件。我已将其设置为按特定列分组,每个组大约有140个成员(总共2138个组)。

我正在尝试生成组名称的一个numpy数组。到目前为止,我已经使用了for循环来生成名称,但是处理所有内容都需要一段时间。

import numpy as np
import pandas as pd

df = pd.read_csv('file.csv')
grouped = df.groupby('col1')
group_names = []
for name,group in grouped: group_names.append(name)
group_names = np.array(group_names, dtype=object)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更有效的方法,无论是通过使用pandas模块还是将名称直接转换为numpy数组。

python csv processing-efficiency python-3.x pandas

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

Collat​​z 猜想与 C(范围 1-100,000,000)最大循环

我正在编写一个程序,计算数字范围(1 - 100,000,000)之间Collat​​z 猜想的最多循环,我需要它在 4 分钟内在 Linux 系统上运行

command gcc -O0 -m32 -Wall -Wextra -Werror -pedantic -o collatz collatz.c.
Run Code Online (Sandbox Code Playgroud)

关于如何改进算法的任何想法,因为在 10,000,000 次之后,程序需要很长时间才能完成,请记住,我不能使用多线程,也不能使用预先计算的数据。

欢迎所有答案,谢谢您的宝贵时间。

// Lets find the longest collatz
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

// This function finds how many times it took for a number to reach 1
unsigned long int collatz(uint32_t First_num) {
    // steps measures how many times a number needs to reach 1
    uint32_t steps = 1;
    // This is the loop that applies …
Run Code Online (Sandbox Code Playgroud)

c processing-efficiency collatz

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

在python中找到浮点数量级的最有效方法

我必须进行一些迭代计算,并且每次都需要找到浮点数的数量级(科学记数法中 e 之后的那个位)。目前我正在用一个循环来做这件事,但它占用了很多时间,我的计算需要永远。

while n<1.0:
    order=order-1
    n=n*10
Run Code Online (Sandbox Code Playgroud)

是否有一些函数可以用来从 python 存储浮点数的方式中快速提取这些信息?我被教导浮点数分别存储值和指数。

编辑:它不是重复的,因为我要求最有效的方法。提出的对数实际上比循环慢三倍。

python floating-point performance loops processing-efficiency

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