我正在使用 Java Visual VM 的内存采样功能,但我无法回答以下问题:
为什么会创建这么多实例?
为什么这些实例数和字节数不断增加?
例如,我创建了一个非常简单的 Java 程序,如下所示:
public class TestMemory{
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello");
Thread.sleep(60 * 60 * 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在 Java Visual VM 中看到有 611 个类。实例数量不断从 25,000 增加到接近 50,000,然后又回落到 25,000 左右。实例减少的原因可能是由 GC 引起的,但我不知道为什么这些数字如此动态,即使我没有对我的程序做任何事情。
我有一个包含五个项目的向量。
my_vec <- c("a","b","a","c","d")
Run Code Online (Sandbox Code Playgroud)
如果我想将这些值重新排列成一个新的向量(shuffle),我可以使用 sample():
shuffled_vec <- sample(my_vec)
Run Code Online (Sandbox Code Playgroud)
简单 - 但 sample() 函数只给了我一种可能的洗牌。如果我想知道所有可能的洗牌组合怎么办?各种“combn”的功能似乎并没有帮助,expand.grid()给我的每一个可能的组合都与更换,当我需要它无需更换。执行此操作的最有效方法是什么?
请注意,在我的向量中,我有两次值“a”——因此,在返回的一组混洗向量中,它们都应该在集合中都有两次“a”。
我有一个任意概率密度函数在 Matlab 中离散为矩阵,这意味着对于每对 x,y,概率存储在矩阵中:A(x,y) = 概率
这是一个 100x100 矩阵,我希望能够从这个矩阵中生成二维 (x,y) 的随机样本,并且如果可能的话,能够计算 PDF 的均值和其他矩。我想这样做是因为在重采样后,我想将样本拟合到近似的高斯混合模型。
我一直在寻找任何地方,但我没有找到任何像这样具体的东西。我希望你能帮助我。
谢谢你。
我正在尝试sample(),但每当我使用自定义概率时,它会不断显示"不正确的概率"
我已经尝试过几乎所有东西,但仍然卡住了.请指导我做错了什么..
码:
sample(10:50,4,replace = T,prob = c(.1,.2,.3,.4))
Run Code Online (Sandbox Code Playgroud)
sample.int中的错误(长度(x),大小,替换,概率):
概率数不正确
考虑一个 5 变量累积分布函数(cdf),我将其称为 F。
我想在 Matlab 中从这个 cdf 中随机采样 5x1 向量。F不是Matlab中已经实现的cdf(如normal、t-student等)。具体来说,它被定义为
我已经在这个论坛和其他论坛上阅读了几个关于如何从 Matlab 中自定义概率分布函数进行采样的问题/答案。然而,
1)大多数都是针对单变量cdf,例如这里。这个想法是应用逆变换采样。我的问题有点复杂,因为我需要“反转”5 变量函数。
2)另一种选择可能是按照此处的建议使用slicesample,但我不知道在我的情况下如何编写概率密度函数的解析表达式。
3)这是另一个想法,但特定于二元情况。
您能帮助我了解如何继续吗?
我想编写一个函数,对n 个彩票进行抽样,每个彩票有6 个号码,从1 到 45,每个号码都没有替换。但是,我需要有效地执行此操作,这意味着没有循环或类似循环的函数。(我想 Rcpp 也可以工作,但我更喜欢基 R 中的矢量化解决方案)
无限制求解:
lottery_inef <- function(n){
t(replicate(n,
sample(1:45, 6)))
}
Run Code Online (Sandbox Code Playgroud)
所以在这里我得到一个矩阵,其中每一行对应一张彩票。现在,如果我想模拟数百万张彩票,这会变得非常慢,因此我对矢量化解决方案感兴趣。
我的想法是:
lottery_ef <- function(n){
m <- matrix(sample(1:45, n*6, replace = TRUE), ncol = 6)
# somehow subset the matrix without a loop to remove all the
# rows that have non-unique values as in the lottery we can only draw each number once
}
Run Code Online (Sandbox Code Playgroud)
对于高效版本,我在没有循环或 apply() 的子集点上有点迷失。如果有人可以解决这个子集问题,或者为我指出一个完全不同的方向,这将引导我找到解决方案,我将不胜感激。
我想知道如何使用复制权重和调查包的限制实现来构建引导置信区间/标准误差。
\n看看survey包的confint 实现,它似乎只是简单地采用了标准错误theta复制后生成的列表的标准误差,并将其乘以与给定 alpha 范围相对应的统计数据。
但这并不真正符合我所知道的任何引导程序实现。通常,您会使用 theta 分布的百分位数来获取样本均值分布的置信区间。T 和 BCa 间隔是另一回事。
\n这是我的 R 代码。我没有使用提供的权重,而是让repweights权重以相同的概率生成为“具有替换的样本”权重。
data(api)\nd <- apiclus1 %>% select(fpc, dnum,api99)\ndclus1<-svydesign(id=~dnum, data=d, fpc=~fpc)\nrclus1<-as.svrepdesign(dclus1,type="bootstrap", replicates=100)\nRun Code Online (Sandbox Code Playgroud)\n为了测试置信区间,我们可以使用:
\ntest_mean <- svymean(~api99, rclus1)\nconfint(test_mean, df=degf(rclus1))\nconfint(test_mean, df=degf(rclus1)) - mean(d$api99)\nRun Code Online (Sandbox Code Playgroud)\n哪些结果:
\n 2.5 % 97.5 %\napi99 554.2971 659.6592\n 2.5 % 97.5 %\napi99 -52.68107 52.68107\nRun Code Online (Sandbox Code Playgroud)\n很明显,该区间是对称的,这违背了使用引导程序的一些目的。
\n那么让我们试试这个:
\ntest_bs <- withReplicates(rclus1, function(w, data) weighted.mean(data$api99, w), return.replicates=T)\nRun Code Online (Sandbox Code Playgroud)\n这将引导重复,其中权重是重复权重(我假设是替换权重)。以下是在复制中使用 BCa 间隔的间隔:
\nbca(test$replicates) …Run Code Online (Sandbox Code Playgroud) 我需要一种方法来将1维值范围(即连续整数)随机分成k个部分.只需使用伪随机生成器来挑选分裂点,技术上就可以完成工作.然而,它允许范围的可能性非常小(相反非常大).我一直在寻找一种方法来解决这个问题,而不需要采用硬编码范围限制.
我找到了这篇文章.它涉及2d地形生成.但它面临同样的问题并提出了解决方案.你可以看到多边形部分,作者在那里提到劳埃德放松.整个事物的来源是Voronoi图,它适用于2d范围.此外,如果你看一下构建劳埃德放松需要的Voronoi图的算法,它开始于:
令*(z)为变换*(z)=(zx,zy + d(z)),其中d(z)是抛物线,最小值为z
当然,我在1d没有抛物线.
在我的1d范围的情况下,我不清楚如何获得相同的结果.或者可能有一个不同/更好的方法来解决这个问题?
我有以下matlab代码,我试图在16KHz采样频率下获得64个不同正弦波频率的样本:
close all; clear; clc;
dt=1/16000;
freq = 8000;
t=-dt;
for i=1:64,
t=t+dt;a(i)=sin(2*pi*freq*t);
end
plot(a,'-o'); grid on;
Run Code Online (Sandbox Code Playgroud)
对于freq = 1000,输出图是
图表似乎正常到2000,但在3000,图表是
我们可以看到每个周期的振幅都会发生变化
同样,在4000处,图表是
不完全是一个正弦波,但振幅在每个周期都是预期的,如果我播放它听起来像一个单一的频率音调
但我们再次在6000
我们有8000
由于采样频率为16000,我假设我应该能够生成高达8000的正弦波样本,并且我期望我在4000处得到的图形出现在8000处.相反,即使在3000处,图形也开始看起来很奇怪
如果我将采样频率更改为32000并将正弦波频率更改为16000,那么我得到的是与现在8000相同的图形.为什么matlab会以这种方式运行?
编辑:
在freq = 7900

我有以下代码将音频文件的样本读入字节数组.
int signal_read = signal.Read(signal_sample, 0, signal_length);
MessageBox.Show(signal_read + "");
Run Code Online (Sandbox Code Playgroud)
哪个signal是WaveFileReader类的对象.
MessageBox.Show始终显示从软件Audacity获取的实际样本数的两倍.
难道read方法无法返回读取的音频样本的数量?