返回Julia中2D直方图的存储单元中的频率
假设我有一些2D数据点,并且使用Julia中的Plots包,可以很容易地绘制2D直方图。我的任务是定义一个函数,该函数将数据点映射到该点所属bin的数据点频率。有哪些功能可以很好地完成这项任务 例如,如以下2D直方图所示: 我想定义一个函数,这样当我输入一个任意的数据点,在这个直方图的域内,函数会输出相应的bin的频率。在上图中,当我输入返回Julia中2D直方图的存储单元中的频率,julia,histogram2d,Julia,Histogram2d,假设我有一些2D数据点,并且使用Julia中的Plots包,可以很容易地绘制2D直方图。我的任务是定义一个函数,该函数将数据点映射到该点所属bin的数据点频率。有哪些功能可以很好地完成这项任务 例如,如以下2D直方图所示: 我想定义一个函数,这样当我输入一个任意的数据点,在这个直方图的域内,函数会输出相应的bin的频率。在上图中,当我输入(0.1,0.1)时,函数应该输出,比如说,375(我假设那里最亮的网格表示375的频率)。Julia中是否有任何方便的函数来实现上述任务 编辑: 从标准正态
(0.1,0.1)
时,函数应该输出,比如说,375
(我假设那里最亮的网格表示375
的频率)。Julia中是否有任何方便的函数来实现上述任务
编辑:
从标准正态分布生成的10000个2D数据点创建直方图。Julia中是否有任何函数可以输入2D点并输出该点所属bin的频率?通过创建数组和容器并计算输入数据点的容器中的元素数,可以自己编写一个,但这将是一种乏味的方式 我不能100%确定StatsPlots是否正在这样做,但一种方法是使用StatsBase的直方图,它适用于N维:
using StatsBase, StatsPlots, Distributions
# Example data
data = (randn(10_000), randn(10_000))
# Plot StatsPlots 2D histogram
histogram2d(data)
# Fit a histogram with StatsBase
h = fit(Histogram, data)
x = searchsortedfirst(h.edges[1], 0.1) # returns 10
y = searchsortedfirst(h.edges[2], 0.1) # returns 11
h.weights[x, y] # returns 243
# Or as a function
function get_freq(h, xval, yval)
x = searchsortedfirst(h.edges[1], xval)
y = searchsortedfirst(h.edges[2], yval)
h.weights[x, y]
end
get_freq(h, 1.4, 0.6) # returns 32
请提供一些示例代码与您的问题,然后它是更容易和更快地告诉你如何做。(另请参见)是的,这就是Plots正在执行的操作(您不需要StatsPlots)-创建StatsBase 2d直方图(经过一些魔法来定义存储箱),然后绘制直方图对象。因此,最有效的方法是完全绕过地块,使用StatsBase。请注意,StatsBase中的自动箱子选择程序较差,因此箱子会有所不同。
using StatsBase, StatsPlots, Distributions
# Example data
data = (randn(10_000), randn(10_000))
# Plot StatsPlots 2D histogram
histogram2d(data)
# Fit a histogram with StatsBase
h = fit(Histogram, data)
x = searchsortedfirst(h.edges[1], 0.1) # returns 10
y = searchsortedfirst(h.edges[2], 0.1) # returns 11
h.weights[x, y] # returns 243
# Or as a function
function get_freq(h, xval, yval)
x = searchsortedfirst(h.edges[1], xval)
y = searchsortedfirst(h.edges[2], yval)
h.weights[x, y]
end
get_freq(h, 1.4, 0.6) # returns 32