假设我要像功能添加map到斯卡拉List,沿着线的东西list mapmap f,其功能适用f于每个元素list的两倍.(一个更严重的例子可能是实现并行或分布式地图,但我不想被那个方向的细节分心.)
我的第一种方法是
object MapMap {
    implicit def createFancyList[A](list: List[A]) = new Object {
        def mapmap(f: A => A): List[A] = { list map { a: A => f(f(a)) } }
    }
}
现在这很好用
scala> import MapMap._
import MapMap._
scala> List(1,2,3) mapmap { _ + 1 }
res1: List[Int] = List(3, 4, 5)
当然除了这只是为ListS,而且也没有理由我们不应该想这对任何工作Traverseable,具有map功能,例如SetS或Stream秒.所以第二次尝试看起来像
object MapMap2 {
    implicit def …我可以有一个类型(现在忘记它的语义),它可以是协变的还是逆变的?
例如:
public interface Foo<in out T>
{
    void DoFooWith(T arg);
}
关于Eric Lippert的博客,了解C#4.0中的差异肉和土豆,因为除此之外几乎没有什么能够涵盖这个主题的充分理由.
无论如何我试了一下,不仅不允许这样做,而且它告诉我,我错过了重点.我需要理解只读,只写和方差之间的联系.
我想我还有更多的阅读要做.
但同时,欢迎任何短暂的,顿悟的诱导答案.
我想从Scala的不可变映射派生出来.它定义如下:
trait Map[A, +B]
不幸的是,我的实现需要在B中保持不变.我尝试了以下内容,但没有成功:
def +(kv : (A, B)) : MyMap[A, B] = { ... }
override def +[B1 >: B](kv : (A, B1)) : MyMap[A, B1] =
    throw new IllegalArgumentException()
也许有一招@uncheckedVariance?
以下语句编译正常并按预期工作:
val map : Map[_ >: Int with String, Int] = Map(1 -> 2, "Hello" -> 3)
但是,如果我尝试添加到地图:
map + ((3,4))
要么
map + (("Bye", 4))
然后我得到一个类型不匹配:
发现:java.lang.String("Bye")
required:_ $ 1其中type _ $ 1>:Int with String
如果我弱化类型签名以允许Any作为Key的类型,那么这一切都按预期工作.
我的直觉说这与Map的键类型的不变性有关,并且_ $ 1在某种程度上被固定为特定的超类型Int with String,但我对此并不特别满意.谁能解释一下发生了什么?
编辑添加:
如果您想知道这出现在哪里,那么如果您执行以下操作,则会获得签名:
val map = if (true) Map(1 -> 2) else Map("1" -> 2)
我有一个具有以下结构的SQLite数据库:
rowid       ID                  startTimestamp   endTimestamp   subject
1           00:50:c2:63:10:1a   1000             1090           entrance
2           00:50:c2:63:10:1a   1100             1270           entrance
3           00:50:c2:63:10:1a   1300             1310           door1
4           00:50:c2:63:10:1a   1370             1400           entrance
.
.
.
我在这里准备了一个sqlfiddle:http://sqlfiddle.com/#!2/fe8c6/2
使用此SQL-Query,我可以获得endTime和一行与下一行之间的startTime之间的平均差异,按主题和ID排序:
SELECT
    id,
    ( MAX(endtimestamp) - MIN(startTimestamp)
    - SUM(endtimestamp-startTimestamp)
    ) / (COUNT(*)-1) AS averageDifference
FROM
    table1
WHERE ID = '00:50:c2:63:10:1a'
AND subject = 'entrance'
GROUP BY id;
我的问题:要计算平均值是没有问题的,这就是查询.但是,我怎样才能得到标准偏差和这些值的方差?
我想为一个简单的项目构建一个生产者和消费者的通用系统.
我现在拥有的是什么
public interface IMessage     {    }
public interface Message1 : IMessage    {    }
public interface Message2 : IMessage    {    }
public interface IConsumer<T>    {    }
public interface IProducer<T>    {    }
public class Mop1 : IConsumer<Message1>, IProducer<Message2>
{
}
class Program
{
    static void Main(string[] args)
    {
        var list = new List<IConsumer<IMessage>>();
        var mop = new Mop1();
        list.Add(mop);   // Error occurs here
    }
}
最后一行给出了一个错误 cannot convert from 'Mop1' to 'IConsumer<GenericPubSub.IMessage>'
但是Mop1实现了IMessage派生类型的IConsumer.这是一些差异问题吗?这有什么问题?
我成功地使用 Welford 的方法来计算运行方差和标准差,正如 Stack Overflow 和John D Cook 的优秀博客文章中多次描述的那样。
然而,在样本流中,有时我会遇到“回滚”或“删除样本”命令,这意味着先前的样本不再有效,应从计算中删除。我知道要移除的样本的价值以及处理时间。但我正在使用 Welford,因为我无法返回再次遍历所有数据。
是否有一种算法可以成功调整我的运行方差以删除或否定特定的先前处理的样本?
简而言之,我试图使用 OpenCVSharp 作为 C# 函数的一部分来计算图像的清晰度。
作为第一次尝试,我使用了拉普拉斯滤波器,如下所示:
int kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = image.Type().Depth;
Mat sharpenedImage = image.Laplacian(ddepth, kernel_size, scale, delta);
\* calculate the variance of the laplacian*\
最后,我想要 this 的方差sharpenedImage。
我已经在 Python 中轻松尝试过:
def variance_of_laplacian(image):
    lap_val = cv2.Laplacian(image, cv2.CV_8UC1)
    return lap_val.var()
lap_val.var()那么C# 中有类似的东西吗?
我找不到任何与此相关的匹配文章。谢谢你!
我有相当大的数据集,我想在其中排除方差相当低的列,这就是为什么我想使用短语 NearZeroVar。但是,我确实很难理解 freqCut 和 uniqueCut 的作用以及它们如何相互影响。我已经阅读了 R 中的解释,但这并没有真正帮助我解决这个问题。如果有人能给我解释一下,我将非常感激!
我有一个函数需要一个短暂的对象。我希望我总是能够将一个长寿的对象传递给它。但当我尝试对其进行编码时,出现了一个奇怪的错误:
type F<'arg> = Box<dyn FnOnce(&'arg ())>;
fn contravar<'small, 'large: 'small>(f: F<'small>) -> F<'large> {
    f
}
特别:
error: lifetime may not live long enough
 --> src/lib.rs:3:5
  |
2 | fn contravar<'small, 'large: 'small>(f: F<'small>) -> F<'large> {
  |              ------  ------ lifetime `'large` defined here
  |              |
  |              lifetime `'small` defined here
3 |     f
  |     ^ function was supposed to return data with lifetime `'large` but it is returning data with lifetime `'small`
  |
  = help: consider adding …