我创建了代码,根据欧几里德距离执行从一个向量到另一个向量的点映射,并检查它是否正常工作.
然而,这需要花费太多时间.基本上我已经为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) 用一些java处理进行两次数据库调用还是一次数据库调用更好?
一个数据库调用只获取相关数据,这些数据将被分成两个不同的列表,这需要几行 java。
我在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)
输出数据帧: …
我正在编写一个小程序,它接收一个.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) 我有这么长的音译:
$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次.
谢谢.
我有一个枚举和一个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
我试图找到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个元素,这需要很长时间.我怎样才能提高它,使其更有效率?
我有一个约有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数组。
我正在编写一个程序,计算数字范围(1 - 100,000,000)之间Collatz 猜想的最多循环,我需要它在 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) 我必须进行一些迭代计算,并且每次都需要找到浮点数的数量级(科学记数法中 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