返回Julia中2D直方图的存储单元中的频率

返回Julia中2D直方图的存储单元中的频率,julia,histogram2d,Julia,Histogram2d,假设我有一些2D数据点,并且使用Julia中的Plots包,可以很容易地绘制2D直方图。我的任务是定义一个函数,该函数将数据点映射到该点所属bin的数据点频率。有哪些功能可以很好地完成这项任务 例如,如以下2D直方图所示: 我想定义一个函数,这样当我输入一个任意的数据点,在这个直方图的域内,函数会输出相应的bin的频率。在上图中,当我输入(0.1,0.1)时,函数应该输出,比如说,375(我假设那里最亮的网格表示375的频率)。Julia中是否有任何方便的函数来实现上述任务 编辑: 从标准正态

假设我有一些2D数据点,并且使用Julia中的Plots包,可以很容易地绘制2D直方图。我的任务是定义一个函数,该函数将数据点映射到该点所属bin的数据点频率。有哪些功能可以很好地完成这项任务

例如,如以下2D直方图所示:

我想定义一个函数,这样当我输入一个任意的数据点,在这个直方图的域内,函数会输出相应的bin的频率。在上图中,当我输入
(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