Your sample code isn't reproducible, so I'll create some fake data instead, and use it in my code:
x <- rexp(100)
y <- rnorm(100)
library(MASS)
kde <- kde2d(x, y, n = 100)
size <- 100 # Sample size wanted
# Sample cells from the density matrix
pts <- sample(length(kde$z), size, prob = as.numeric(kde$z))
# Generate the samples by choosing corresponding elements from
# the x and y vectors, and adding some fuzz
xfuzz <- diff(kde$x)[1]/2
sx <- kde$x[row(kde$z)[pts]] + runif(size, -xfuzz, xfuzz)
yfuzz <- diff(kde$y)[1]/2
sy <- kde$y[col(kde$z)[pts]] + runif(size, -yfuzz, yfuzz)
# Plot the original sample and the generated one
par(mfrow=c(1,2))
plot(x, y, main = "Real data")
plot(sx, sy, main = "Fake data")
Created on 2021-01-25 by the reprex package (v0.3.0)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…