Tag: 数学

列出1 … n之间k个整数的所有可能组合(n选择k)

出于没有特别的原因,我决定寻找一种算法,该算法产生1 … n之间k个整数的所有可能选择,其中k整数之间的顺序无关紧要(n选择k thingy)。 从完全相同的原因,这完全没有理由,我也用C#实现了它。 我的问题是: 你在我的算法或代码中看到任何错误吗? 而且,更重要的是, 你能建议一个更好的算法吗? 请注意算法而不是代码本身。 这不是我写过的最漂亮的代码,虽然可以告诉你是否看到了错误。 编辑: Alogirthm解释 – 我们持有k指数。 这会创建k个嵌套for循环,其中循环i的索引是indices [i]。 它模拟k for for循环,其中indices [i + 1]属于嵌套在indices [i]循环中的循环。 indices [i]从索引[i-1] + 1到n-k + i + 1运行。 码: public class AllPossibleCombination { int n, k; int[] indices; List combinations = null; public AllPossibleCombination(int n_, int k_) { if (n_ <= […]

两个arrays的产品总和(dotproduct)

首先,我知道我的标题可以更好地表达,但我的数学课程已经不复存在了,我不记得正确的单词了。 我需要做这样的事情(伪c#) int[] digits1 = new int[10]{0,1,2,3,4,5,6,7,8,9}; int[] digits2 = new int[10]{0,1,2,3,4,5,6,7,8,9}; int result = digits1*digits2 这将是每个数组的元素[i]的乘积之和。 这显然不起作用。 对任何更好的头衔或解决方案的任何建议? 编辑澄清:我知道我可以循环它们并进行数学计算。 基本上我认为有一个更好的方法来做到这一点,我纯粹出于个人的好奇而寻找它。

最快的log2(int)和log2(float)实现

问题是 是否还有其他(和/或更快)的基本2log实现? 应用 log2(int)和log2(float)操作在许多不同的上下文中非常有用。 仅举几例:压缩算法,3d引擎和机器学习。 在几乎所有这些上下文中,它们都被用在被称为数十亿次的低级代码中……尤其是log2(int)操作非常有用。 因为我发现自己一直在使用log2,所以我不想给出我正在处理的特定应用程序。 同样的事实是,这是一个真正的性能排水器(如各种应用程序的性能测试所示)。 对我来说,尽可能快地获得这个是关键。 底部添加了测试所有实现的完整源代码,因此您可以自己查看。 当然……运行你的测试至少3次,并确保计数器足够大,可以达到几秒钟。 我也做’添加’操作,以确保整个循环不被JIT’ter神奇地移除。 让我们开始真正的工作吧。 琐碎的实施 C#中2log的简单实现是: (int)(Math.Log(x) / Math.Log(2)) 这种实现很简单,但也很慢。 它需要2个Log操作,这本身就很慢。 当然,我们可以通过使1.0/Math.Log(2)成为常数来优化它。 请注意,我们需要稍微修改此常量以获得正确的结果(作为浮点错误的结果)或添加一个小数字以获得正确的结果。 我选择了后者,但这并不重要 – 最终结果在所有情况下都很慢。 表查找 更快的解决方案是使用查找表。 虽然您可以使用任何2的幂的查找表,但我通常使用256或64K条目的表大小。 首先我们创建查找表: lookup = new int[256]; for (int i = 1; i < 256; ++i) { lookup[i] = (int)(Math.Log(i) / Math.Log(2)); } 接下来,我们实现2log如下: private static int LogLookup(int i) […]

什么是.Net的良好统计数学包?

我正在寻找一个可以进行高级数学,统计,统计分布等的图书馆。 目前我正在寻找二项式和泊松分布的东西。

C# – (int)Math.Round((double)(3514 + 3515)/ 2)= 3514?

大家好。 int[] ai1=new int[2] { 3514,3515 }; void average1() { List aveList = new List { ai1[0],ai1[1]}; double AveragLI = aveList.Average(); int AverLI = (int)Math.Round((double)AveragLI); label1.Text = AverLI.ToString(); } 返回3514; 不应该是3515?

在给定值附近获得随机exception

我想在double类型的已知值数组中添加一种纹波。 我指出这一点,因为Random.Next / Random.NextDouble()表现不同。 我如何才能最好地完成这项任务? 假设我在数组中有20个值, List arr = new List() { 40, 40, 40, 40 ….. }; 20个值,在40的平均值,总共800,以使其更容易。 在这个方法之后,我希望整体总数仍然是800,但每个单独的值都应该修改。 值应该是正数,因为它们之后是total+=i 。 到目前为止,使用给定数量的值的百分比来解决该问题。 1.0 / 20 = 0.05, then multiplicate that with the total and the iteration number. Then subtract the result from the remainder. Finally i just return a sort by new Guid() 1.0 […]

Cubic Bezier反向GetPoint方程:float for Vector Vector for float

鉴于结果值和四点,是否有可能获得浮动? 如果是这样,怎么样? public static Vector3 GetPoint (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) { t = Mathf.Clamp01(t); float oneMinusT = 1f – t; return oneMinusT * oneMinusT * oneMinusT * p0 + 3f * oneMinusT * oneMinusT * t * p1 + 3f * oneMinusT * t * t * p2 + […]

如何使decimal.TryParse保持尾随零?

目前如果我这样做 decimal d; temp = “22.00”; decimal.TryParse(temp, NumberStyles.Any, CultureInfo.InvariantCulture, out d); 然后’d’变成22.有没有什么方法可以确保尾随的零没有被消灭? 仅供参考我正在使用.net 4.0

MathNet通过矩阵提高标量

我正在尝试使用MathNumerics线性代数库在.net中实现Logistic回归。 我需要实现以下等式,并且不确定如何通过矩阵来提高e。 1.0 ./(1.0 + E。^( – 。* Z)) 其中Z是矩阵,E是数学常数e。 因此,有问题的代码部分是E。^ Z.

C#如何生成随机数取决于概率

我有一种情况,我必须生成一个随机数,这个数字必须是zero或one 所以,代码是这样的: randomNumber = new Random().Next(0,1) 但是,业务要求表明生成的数字为零的概率仅为10%,生成的数字为1的概率为90% 但是,我可以在生成随机数时包括这个概率吗? 我的想法是: 生成包含10个零和90个整数的整数数组。 生成1到100之间的随机索引 获取与该索引对应的值 但我不知道这种方式是否正确,而且,我认为C#应该为它准备好一些东西