在玩了一下haskell之后我偶然发现了这个功能:
Prelude Data.Maclaurin> :t ((+) . ($) . (+))
((+) . ($) . (+)) :: (Num a) => a -> (a -> a) -> a -> a
Run Code Online (Sandbox Code Playgroud)
(Data.Maclaurin由包向量空间导出.)因此它需要一个Num,一个函数,另一个Num并最终返回一个Num.以下工作有什么神奇之处?
Prelude Data.Maclaurin> ((+) . ($) . (+)) 1 2 3
6
Run Code Online (Sandbox Code Playgroud)
2显然不是一个函数(a-> a)或者我错过了什么?
在编写几个数学实用程序时,我遇到需要实现可以在任何两个基本算术类型之间进行比较的通用实用程序.当我开始编码时,很明显这个操作并不像看起来那么简单,因为我需要正确处理边角情况,特别是当类型具有不同的精度时,即在类型之间转换期间的舍入策略变得很重要.考虑:
float a1 = 4.8f;
int a2 = 4;
assert(a2 != (int) a1); //fails erroneously since we truncated a1
float b1 = 40000000.0f; //can represent only 40000000 and 40000004 accurately
long b2 = 40000002;
assert(b1 != (float) b2); //fails erroneously since we now truncated b2
Run Code Online (Sandbox Code Playgroud)
以上可以使用c ++ 0x类型特征来实现,以根据提供给比较函数的模板参数自动选择适当的算法.然而,这是非常复杂的,并且有很多地方可以出现bug,所以我不认为自己发明一切是值得的.有谁知道正确实现上述的库?
如果我有代码5 * 5.0,结果转换为最准确的类型,Double.
但这似乎不适用于代码
case class Value[T : Numeric](value: T) {
type This = Value[T]
def +(m: This) = Value[T](implicitly[Numeric[T]].plus(value, m.value))
...
}
implicit def numToValue[T : Numeric](v: T) = Value[T](v)
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,使之类的东西someIntValue + double的工作,在那里someIntValue是Value[Int]和double是Double?
PS:对不起完美的标题感到抱歉.我很感谢有关更好措辞的建议......
我有以下通用的Interval类(由用户soc为我制定):
case class Interval[T](from: T, to: T)(implicit num: Numeric[T]) {
import num.mkNumericOps // allows us to write from.toDouble and to.toDouble
def mid: Double = (from.toDouble + to.toDouble) / 2.0
}
Run Code Online (Sandbox Code Playgroud)
典型用例:Interval [Double]或Interval [Int].为了添加二元联合和交集运算符,我(implicit num: Numeric[T])在伴随对象中遵循了类似的模式:
object Interval {
def union[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
import num.mkOrderingOps // allows interval1.from min
Interval[T](interval1.from min interval2.from, interval1.to max interval2.to)
}
def intersect[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
import num.mkOrderingOps
Interval[T](interval1.from max interval2.from, …Run Code Online (Sandbox Code Playgroud) 我试图使用Weka的NaiveBayesUpdateable分类器.我的数据包含名义和数字属性:
@relation cars
@attribute country {FR, UK, ...}
@attribute city {London, Paris, ...}
@attribute car_make {Toyota, BMW, ...}
@attribute price numeric %% car price
@attribute sales numeric %% number of cars sold
Run Code Online (Sandbox Code Playgroud)
我需要根据其他属性预测销售数量(数字!).
据我所知,我不能在Weka中使用数字属性进行贝叶斯分类.一种技术是在长度为k的N个区间中分割数值属性的值,而使用标称属性,其中n是类名,如下所示:@attribute class {1,2,3,... N}.
然而,我需要预测的数字属性范围从0到1 000 000.创建1 000 000个类根本没有任何意义.如何用Weka预测数字属性或者在Weka没有这个任务的工具的情况下寻找什么算法?
我即将编写一个非晶格扩散限制聚合(DLA)模拟,我想知道是否使用C或C++.
出于设计原因,C++会很好,但我想知道C会表现得更好.当然我了解算法性能并选择了最好的算法.所以我不是在谈论将O(n ^ 2)改为O(log n)或类似的.我试图减少我的常数.
如果您不了解DLA,它基本上归结为具有一系列双精度(大小在10 ^ 3和10 ^ 6之间)并且在循环中选择随机双精度来比较(大于/小于)阵列的大部分.
因此,对此重要的性能差异是数据访问和调用功能:
我是否正确地得出结论,判断这一点的最终方法是查看汇编代码(例如比较移动/加载,跳转和调用的数量)?这当然是编译器相关的(例如,您可以将糟糕的C编译器与优秀的C++编译器进行比较).我正在使用Gnu编译器(gcc和g ++).
我发现通过gcc和g ++生成的程序集在跳转次数(无),移动/加载以及对以下两个程序的调用方面几乎相同:
C程序
#include <stdlib.h>
typedef struct
{
double x;
} particle;
double square(double a)
{
return a*a;
}
int main()
{
particle* particles = malloc(10*sizeof(particle));
double res;
particles[0].x = 60.42;
res = square(particles[0].x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++程序
class particle
{
public:
double x;
public:
double square()
{
return x*x;
}
};
int main()
{
particle* particles = new particle[10];
double res;
particles[0].x = …Run Code Online (Sandbox Code Playgroud) 搜索了谷歌和SO,但找不到一个好的答案.我有下表:
Country Value
23 Bolivia 2575.684
71 Guyana 3584.693
125 Paraguay 3878.150
49 Ecuador 5647.638
126 Peru 6825.461
38 Colombia 7752.168
151 Suriname 9376.495
25 Brazil 11346.796
7 Argentina 11610.220
171 Venezuela 12766.725
168 Uruguay 14702.505
37 Chile 15363.098
Run Code Online (Sandbox Code Playgroud)
所有价值均以美元计算 - 我想加上美元符号和逗号.因此,玻利维亚的价值应为2,575.684美元.还有,是否真的需要将行名更改为1到12?如果是这样,一个简单的方法呢?
提前致谢.
我有兴趣实时替换数字匹配并将它们操作为十六进制.
我很想知道是否可以不使用foreach循环.
所以...
两者之间的一切 :
= {数值} ;
将被归为:
= {十六进制数值} ;
preg_match_all('/\=[0-9]\;/',$src,$matches);
Run Code Online (Sandbox Code Playgroud)
是否有任何回调preg_match_all所以不是预先形成一个循环,我可以在preg_match_all捕获每个匹配(实时)时立即操作它们.
这不是正确的语法,但你可以得到这个想法:
preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
Run Code Online (Sandbox Code Playgroud) 是否有一种优雅的数值稳定方式,可以为全参数范围x评估以下表达式,a> = 0?
f(x,a) = sqrt(x+a) - sqrt(x)
Run Code Online (Sandbox Code Playgroud)
是否有任何编程语言或库提供这种功能?如果是,以什么名义?我现在使用上面的表达式没有具体问题,但过去曾多次遇到过这种情况,并且一直以为这个问题必须先解决!
我有一个包含数字和非数字列的数据框,比方说
df <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20],v5=letters[1:20])
Run Code Online (Sandbox Code Playgroud)
要仅选择我将使用的非数字列
fixCol <- !sapply(df,is.numeric)
Run Code Online (Sandbox Code Playgroud)
但现在我还想要包含一个特定的数字列,比如说v2.我的数据框非常大,列的顺序发生了变化,因此我无法使用数字对其进行索引,我真的想使用名称"v2".我试过了
fixCol$v2 = TRUE
Run Code Online (Sandbox Code Playgroud)
但是这给了我警告In fixCol$FR = TRUE : Coercing LHS to a list,这使我无法将原始数据框子集化为仅获得fixCol
df[,fixCol]
Run Code Online (Sandbox Code Playgroud)
得到: Error in .subset(x, j) : invalid subscript type 'list'
最后,我的目标是缩放我的数据框的所有数字列,除了这一个指定的列,使用类似的东西
scaleCol = !fixCol
df_scaled = cbind(df[,fixCol], sapply(df[,scaleCol],scale))
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能做到最好?