小编bie*_*man的帖子

F#区分用户定义类型的联合; 尊重自定义属性

我试图使用一个有区别的联合来表示一些用户定义的类型; 但是,构成DU案例的类型包含DU未遵守的自定义属性.例如,我正在编组一个文件头,其中包含头扩展中的一些可选字段,具体取决于编写该文件的程序.结构的字段还有一个自定义属性,允许结构的字段用正确的字节顺序封送,由下式给出[<endian>].给定一个通用的基本头结构,

[<Struct; StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)>]
type generic_header = {
    [<endian>] header_size: int16
    [<MarshalAs(UnmanagedType.ByValTStr, SizeConst = 55)>]
    file_version: string
    [<endian>] file_size: int16
    header_extension: bool
    }
Run Code Online (Sandbox Code Playgroud)

和带有+/-字段的标头扩展,具体取决于生成标头的程序,

[<Struct; StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)>]
    type header_extension = {
    [<endian>] extended_field_1: int16
    [<endian>] extended_field_2: float32
    [<MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)>]
    extended_array: byte[]
    [<endian>] extended_field_3: int16
    ...
    }
Run Code Online (Sandbox Code Playgroud)

是否有可能拥有一个可以容纳这些类型的区别联合(或甚至另一个结构),并且DU类型可用于将流编组到包含的结构中?如果我单独封送每种类型,那么endian属性会被尊重,我会获得正确的数据.

到目前为止我尝试过的是:

[<Struct>]
type file_header =
    | Header of Header: generic_header
    | Extension of Extension: header_extension
Run Code Online (Sandbox Code Playgroud)

要么:

[<Struct>] type …
Run Code Online (Sandbox Code Playgroud)

f# discriminated-union

6
推荐指数
0
解决办法
131
查看次数

在图像MATLAB中跟踪一条线

我正在整理一个用示波器输出计算一些东西的程序,但是当程序现在工作时,我只是将图像导入MATLAB,然后使用ginput在生成的曲线上找到各个区域的坐标.

有没有办法,我可以采取,比如说,这个图像:

正弦波](http://imgur.com/IlSDDLK)![正弦波

并且使用ginput或类似的东西沿着亮绿色曲线自动跟踪并将x,y坐标存储到单独的数组(可能通过能够区分曲线的颜色和背景颜色)?这样我就可以使用图片中曲线的x,y坐标的实际绘图,而不需要在数据分析中实际使用图像.

我能够得到的最接近的就是用它[x,y]=ginput来沿着曲线捣碎鼠标按钮并生成一个巨大的阵列,但我的手指需要休息!

谢谢!

matlab image image-processing

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

在matlab中使用元素加法向矩阵的对角线添加值

我正在编写一个对矩阵进行操作的脚本,我遇到了需要将前一个矩阵的对角线总和添加到新矩阵的对角元素的问题.到目前为止,我对这个特定功能的代码(下面将详细介绍)是:

t = 1;
for k = (m-1):-1:-(m-1)
    C = bsxfun(@plus, diag(B, k), d);
    g(t) = sum(diag(B, k));
    t = t + 1;
end
Run Code Online (Sandbox Code Playgroud)

其中d是1x3阵列,C应该是3x3阵列; 然而,C被输出为1x3阵列,使得第一对角线被求和并加到d,然后将主对角线求和并加到d,最后的对角线被求和并加到d.

有没有办法可以得到C的值,使得第一个对角线是它添加到d的最后一个元素的各个元素的总和,主对角线的各个元素添加到d的中间元素,以及底部对角线的元素添加到d的第一个元素?(虽然仍然适用于任何数组大小?)

这是一张描述我想要实现的目标的图片:

向对角线添加总和

谢谢!

arrays matlab matrix

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

计算单元格内值的数量

我正在尝试计算 Excel 中单元格内值的数量。到目前为止,我已经找到了很多方法来计算字符数,无论它们是空格、数字还是字母。但是,我想计算列表或单元格中值的数量,如下所示:

假设在单元格 A1 中我有以下值序列:

38 39 101 102 114 115 116 117 118 119 120 121 122 123 124 125
Run Code Online (Sandbox Code Playgroud)

我希望单元格返回16,表明单元格中有十六个值。

有没有一种简单的方法可以用 Excel 来完成此操作?

excel excel-formula

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