小编Col*_*ers的帖子

测试浮点数是否是Matlab中的整数

我的问题 - 第1部分:测试浮点数是否为"整数"(在Matlab中)的最佳方法是什么?

我对第1部分的当前解决方案:显然isinteger是,因为这会测试元素的类型而不是值,所以目前我解决了这样的问题:

    abs(round(X) - X) <= sqrt(eps(X))
Run Code Online (Sandbox Code Playgroud)

但也许有更原生的Matlab方法?

我的问题 - 第2部分:如果我目前的解决方案确实是最好的方法,那么我想知道是否存在推荐的一般容差?正如你从上面所看到的,我使用了sqrt(eps(X)),但我没有任何充分的理由.也许我应该使用eps(X),或者也许5 * eps(X)?任何建议都是最受欢迎的.

示例:在Matlab中,sqrt(2)^2 == 2返回False.但实际上,我们可能希望逻辑条件返回True.我们可以做到这一点使用上述方法,因为sqrt(2)^2实际上等于2 + eps(2)(即良好的公差范围内sqrt(eps(2)).但是,这是否意味着我应该总是用eps(X)我的宽容,或者是有充分的理由来使用更大的宽容,比如5 * eps(X),或sqrt(eps(X))

更新(2012-10-31): @FakeDIY指出我的问题部分与此SO问题重复(道歉,不知道我在初始搜索中是如何错过的).鉴于此,我想强调问题的"容忍"部分(在该链接中没有涉及),即是eps(X)一种明智的容忍,或者我应该使用更大的东西5 * eps(X),如果是,为什么呢?

更新(2012-11-01):感谢大家的回复.因为我觉得它们对问题的各个方面都有意义,所以我对所有三个答案都进行了+1.我正在给Eric Postpischil一个答案,因为答案确实很好地解决了问题的容忍部分(并且在这个时间点它有最多的赞成).

floating-point matlab integer

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

如何在Julia中存储具有树状结构的数据

我想在Julia中使用它时将高频金融数据存储在内存中.

我的数据有很多Float64数组.在某些市场上,为了某些安全性,每个阵列都存储一天内的高频数据.例如,对于在纽约证券交易所(纽约证券交易所)上市的IBM 2010-01-04日期,有一个Float64数组.

如上所述,我有许多这样的阵列,涵盖多个日期,市场和证券.我想将它们全部存储在一个对象中,这样可以很容易地检索任何给定的数组(可能利用元数据的树状结构).

在Matlab中,我曾经将它存储在一个结构中,其中第一级是市场,下一级是安全,下一级是日期,然后在树的末尾是相应的数组.在每个级别,我还存储了该级别的字段列表.

Julia实际上没有Matlab结构,所以在Julia中最好的方法是什么?

目前,我能想到的最好的是一系列嵌套复合类型,每个类型都有两个字段.例如:

type HighFrequencyData
    dateList::Array{Date, 1}
    dataArray::Array{Any, 1}
end
Run Code Online (Sandbox Code Playgroud)

其中dateList存储有对应于举行Float64的阵列序列日期的列表dataArray(即,dateListdataArray将具有相同的长度).然后:

type securitiesData
    securityList::Array{String, 1}
    highFrequencyArray::Array{Any, 1}
end
Run Code Online (Sandbox Code Playgroud)

其中securityList存储了与HighFrequencyData所持有的类型序列相对应的证券列表highFrequencyArray.然后:

type marketsData
    marketList::Array{String, 1}
    securitiesArray::Array{Any, 1}
end
Run Code Online (Sandbox Code Playgroud)

其中marketList存储了与securitiesData所持有的类型序列相对应的市场列表securitiesArray.

鉴于此,所有数据现在都可以存储在类型变量中,并在每个嵌套级别marketsData使用marketList,和查找.securityListdateList

但这感觉有点麻烦......

arrays object julia

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

在使用浮点输入时,在Julia中键入稳定函数以进行一般分布

在朱莉娅,我有这样的功能:

function f(x::Float64, c::Float64)
    if x <= 0
        return(0.0)
    elseif x <= c
        return(x / c)
    else
        return(1.0)
    end
end
Run Code Online (Sandbox Code Playgroud)

该函数是类型稳定的,因此可以快速运行.但是,我希望将该函数包含在一个包中以进行常规分发,包括32位计算机.这里的最佳做法是什么?我应该为其编写另一个版本的函数Float32(如果我有很多这样的函数,这可能会很烦人)?我可以使用FloatingPoint输入类型吗?如果我这样做,我怎么保证功能型保持稳定,因为0.01.0Float64,而x / c可能是Float32Float16?也许我可以使用类型参数,例如T<:FloatingPoint然后让x::Tc::T,然后在函数体中使用0.0::T1.0::T确保它是类型稳定的?

这里的任何指导将不胜感激.

floating-point types julia type-stability

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

检查是否可以安全地评估符号

我有一根绳子x。我认为这x是 的子类型类型的字符串表示形式Number。例如,x可能采用值"Float64"。我可以使用以下方法检查这一点:

eval(parse(x)) <: Number
Run Code Online (Sandbox Code Playgroud)

然而,它可能x包含一些危险的东西,比如 的一些变体"rm(something_important)",所以eval在我确定x安全之前使用是一个坏主意。

有什么方法可以安全地检查是否x是 的子类型的字符串表示形式Number

(除了构建所有可能子类型的字符串数组Number并进行比较......)

julia

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

在Julia中将类型Array {Union {Missing,Float64},1}转换为Array {Float64,1}

我有一些缺少值的浮点数组,因此其类型为Array{Union{Missing, Float64},1}。是否有将非缺失部分转换为的命令Array{Float64,1}

julia

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

将每个列元素除以MATLAB中另一列中的对应元素

如果我有一个简单的矩阵

A = [1 3 ; 4 3 ; 6 12]
Run Code Online (Sandbox Code Playgroud)

然后去

A(:,3) = (A(:,1)+A(:,2))
Run Code Online (Sandbox Code Playgroud)

然后第3列中的每个元素都将包含第1列和第2列中对应元素的总和.

但是,当我走的时候

A(:,3) = (A(:,1)/A(:,2))
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,Subscripted assignment dimension mismatch.谷歌搜索没有透露对此错误消息的启发性解释.这里有人可以帮忙吗?

matlab

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