我正在尝试使该数据适合高斯
x = [4170.177259096838, 4170.377258006199, 4170.577256915561, 4170.777255824922, 4170.977254734283, 4171.177253643645, 4171.377252553006, 4171.577251462368, 4171.777250371729, 4171.977249281091, 4172.177248190453, 4172.377247099814, 4172.577246009175, 4172.777244918537, 4172.977243827898, 4173.17724273726, 4173.377241646621, 4173.577240555983, 4173.777239465344, 4173.977238374706, 4174.177237284067, 4174.377236193429, 4174.57723510279, 4174.777234012152, 4174.977232921513, 4175.177231830875, 4175.377230740236, 4175.577229649598, 4175.777228558959, 4175.977227468321, 4176.177226377682, 4176.377225287044, 4176.577224196405, 4176.777223105767, 4176.977222015128, 4177.17722092449, 4177.377219833851, 4177.577218743213, 4177.777217652574, 4177.977216561936, 4178.177215471297, 4178.377214380659, 4178.57721329002, 4178.777212199382, 4178.977211108743, 4179.177210018105, 4179.377208927466, 4179.577207836828, 4179.777206746189, 4179.977205655551, 4180.177204564912, 4180.377203474274, 4180.577202383635, 4180.777201292997, 4180.977200202357, 4181.17719911172, 4181.377198021081, 4181.577196930443, 4181.777195839804, 4181.977194749166, 4182.177193658527, 4182.377192567888, 4182.5771914772495, 4182.777190386612, 4182.9771892959725, 4183.177188205335, 4183.377187114696, 4183.577186024058, 4183.777184933419, 4183.9771838427805, 4184.177182752143, 4184.3771816615035, 4184.5771805708655, 4184.777179480228, 4184.977178389589, 4185.1771772989505, 4185.3771762083115, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用等高线图绘制密度估计值并得到以下错误。
A = np.random.uniform(size=(100, 2))
#mean = np.mean(x)
#cov = np.cov(x)
mean = np.array([0.5, 0.1])
cov = np.array([[0.1, 0.0], [0.0, 1.5,]])
B = multivariate_normal.pdf(A, mean=mean, cov=cov)
# visualize
contours = plt.contour(A, B, linewidths=2)
plt.clabel(contours, inline=True, fontsize=12)
#plt.plot(x, y)
plt.colorbar();
Run Code Online (Sandbox Code Playgroud) 52.3210481666667 52.3841781666667 52.4938248333333 52.6234071666667 52.9058301666667 53.2846095000000 53.8162295000000 54.4442056666667 55.2349903333333 56.0556786666667 56.9660778333333 57.8731546666667 58.7802311666667 59.6142101666667 60.4249306666667 61.1559080000000 61.7971748333333 62.3387626666667 62.8205433333333 63.2259036666667 63.4950361666667 63.7807816666667 63.9203320000000 64.0964311666667 64.1794968333334 64.2625625000000 64.3323375000000 64.3888223333333 64.5117591666667 64.5017913333333 64.6147606666667 64.6878583333334 64.7476660000000 64.8307311666667 64.9038291666667 65.0334115000000 65.1131545000000 65.2261236666667 65.2792856666667 65.3789643333333 65.4387716666667 65.5052241666667 65.5417731666667 65.5949351666667 65.6248388333333 65.6181933333333 65.6580648333333 65.6181935000000 65.6115481666667 65.5716766666667 65.4985790000000 65.4321263333333 65.3291250000000 65.2394141666667 65.1065091666667 64.9470231666667 64.7709240000000 64.5715665000000 64.3622411666667 64.0764953333333 63.7342651666667 63.3920346666667 62.9899973333333 62.6078951666667 62.1460503333333 61.7207541666667 61.2987811666667 60.9166793333333 60.5478676666667 60.2355410000000 59.9398273333333 59.7703733333333 59.5809840000000 59.5112088333333 59.4281431666667 59.3949168333333 59.4015621666667 59.3616906666667 59.3683361666667 59.3749811666667 …Run Code Online (Sandbox Code Playgroud) 我在OpenCV中创建了以下高斯内核,并将其与OpenCV的GaussianBlur函数进行了比较.但是,我得到的是黑色图像,而不是平滑的图像.有人可以对此有所了解吗?
Mat src, dst1,dst2;
Mat gaussiankrnl(3,3,CV_32F);
Point anchor;
double delta;
int ddepth;
anchor = Point( -1, -1 );
delta = 0;
ddepth = -1;
src = imread("coins.pgm");
gaussiankrnl.at<double>(0,0) = 1/16;
gaussiankrnl.at<double>(0,1) = 2/16;
gaussiankrnl.at<double>(0,2) = 1/16;
gaussiankrnl.at<double>(1,0) = 2/16;
gaussiankrnl.at<double>(1,1) = 4/16;
gaussiankrnl.at<double>(1,2) = 2/16;
gaussiankrnl.at<double>(2,0) = 1/16;
gaussiankrnl.at<double>(2,1) = 2/16;
gaussiankrnl.at<double>(2,2) = 1/16;
filter2D(src, dst1, ddepth , gaussiankrnl, anchor, delta, BORDER_DEFAULT );
GaussianBlur(src, dst2, Size(3,3), 1.0);
imshow("result1", dst1 );
imshow("result2", dst2 );
cvWaitKey(0);
return 0;
Run Code Online (Sandbox Code Playgroud) 我必须生成一个高斯分布的随机数列表(我能够做到这一点),然后取这些数字并在直方图中绘制它们.我的问题是我应该在没有使用pylab(或任何其他包)的内置直方图函数的情况下这样做,而且我完全失去了.我一直在网上看,我没有找到任何解释我会怎么做的事,你们有谁知道我能做什么吗?提前致谢.
像大多数物理问题一样,我的情况受到边界的影响,因此我想根据截断的高斯分布生成(带有R)随机数.
这个想法是这些数字的平均值不应该取决于边界.我已经找到了包truncnorm,但它不能完成这项工作:
例如,这里是高斯平均值为0.1和宽度为0.1,但约束在0和1之间的情况:
install.packages("truncnorm")
library(truncnorm)
vec=rtruncnorm(n=100000,a=0,b=1,mean=0.1,sd=0.1)
hist(vec,breaks=100)
mean(vec)
[1] 0.1289061
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,最终均值不是作为输入给出的,我可以通过使用标准rnorm函数并对结果进行子设置得到相同的结果.
我不想重新发明轮子,所以欢迎任何进一步包装的想法或建议!谢谢!
我创建了这个用c ++生成随机数的方法,当我在循环中调用它时,我总是得到相同的随机值,有什么问题?因为我希望在每次循环迭代后都有不同的值.我用标志-std = c ++ 11编译它.
float CDevice::gaussNoise(float mean, float stddev)
{
std::default_random_engine generator(time(NULL));
std::normal_distribution<float> distribution(mean, stddev);
return distribution(generator);
}
Run Code Online (Sandbox Code Playgroud)
主要看起来像这样:
int main
{
class CDevice *device;
device = new CDevice();
std::vector<float> vec;
for(uint32_t i = 0; i< 10; ++i)
vec.push_back(device->gaussNoise(1,5));
for(uint32_t i = 0; i < vec.size(); ++i)
std::cout << vec[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
和输出是(例如):
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
3.71254
Run Code Online (Sandbox Code Playgroud) 给定一个点(x,y)我将如何创建n个随机点,它们与(x,y)的距离是高斯分布的西格玛,并且意味着作为一个参数?
我正在研究高斯混合模型,并遇到了这段代码,该代码从2个双变量高斯分布中抽取了许多样本。我不理解的是代码中使用的技术:
import numpy as np
# Number of samples per component
n_samples = 500
# Generate random sample, two components
np.random.seed(0)
C = np.array([[0., -0.1], [1.7, .4]])
X = np.r_[np.dot(np.random.randn(n_samples, 2), C),
.7 * np.random.randn(n_samples, 2) + np.array([-6, 3])]
Run Code Online (Sandbox Code Playgroud)
(原始链接:http : //scikit-learn.org/stable/auto_examples/mixture/plot_gmm_selection.html#sphx-glr-auto-examples-mixture-plot-gmm-selection-py)
根据此Wikipedia链接,我们可以通过Cholesky分解协方差矩阵来生成多元高斯样本,然后将其乘以由标准正态分布的成分组成的向量。
我的问题是代码中的C变量不是下三角矩阵,那么它在多元高斯随机生成中如何有意义?
在使用高斯混合模型之前进行特征缩放很重要吗?以及为什么当我们使用概率来获取集群的参数(均值和协方差矩阵)时它很重要。另一方面,我知道在使用 K 均值之前标准化我们的数据很重要,因为这里的聚类取决于点和聚类之间的 Ecludiane 距离,如果一个特征具有较大的值,它将主导这个多维距离计算
我尝试使用 CUDA 和 Qt 来模糊图像。我使用 NPP 库,nppiFilterGauss_8u_C1R 效果很好
void cuda_npp_gauss_filter_qt(uchar* pSourceData, uchar* pResultData, const int &ImageLineStep, const int &ImageWidth, const int &ImageHeight)
{
NppiSize oSizeROI;
oSizeROI.width = ImageWidth;
oSizeROI.height = ImageHeight;
Npp32s SourceStep = ImageLineStep;
Npp32s DestinationStep = ImageLineStep;
size_t AllocationSizeInBytes = ImageLineStep * ImageHeight;
Npp8u *pSource, *pDestination;
cudaMalloc<Npp8u>(&pSource,AllocationSizeInBytes);
cudaMalloc<Npp8u>(&pDestination,AllocationSizeInBytes);
cudaMemcpy(pSource, pSourceData, AllocationSizeInBytes, cudaMemcpyHostToDevice);
nppiFilterGauss_8u_C1R(pSource, SourceStep, pDestination, DestinationStep, oSizeROI, NPP_MASK_SIZE_15_X_15);
cudaMemcpy(pResultData, pDestination, AllocationSizeInBytes, cudaMemcpyDeviceToHost);
}
Run Code Online (Sandbox Code Playgroud)
但 nppiFilterGaussAdvanced_8u_C1R 会损坏图像
void cuda_npp_gauss_filter_qt_advanced(uchar* pSourceData, uchar* pResultData, const int &ImageLineStep, const int &ImageWidth, const …Run Code Online (Sandbox Code Playgroud) 如果我想从均匀分布中取样并得到double值,我觉得我可以在java中同时使用Random.nextDouble()或Random.nextGaussian().有人可以向我解释一下这个区别.
我真的坚持使用C++中的高斯消除代码,我需要返回上三角矩阵但仍然只有我得到的是分段错误.我知道必须有一些分配的内存,但我找不到.
码:
#include <iostream>
using namespace std;
double ** allocateDynamicArray(int order){
double ** dynArray = new double *[order];
int cols = order+1;
double *pool = new double [order * cols];
for(int i = 0;i < order; i++, pool += cols){
dynArray[i] = pool;
}
return dynArray;
}
void deallocateDynamicArray(double **dynArray){
delete [] dynArray[0];
delete [] dynArray;
}
void addAndPrintArray(double **dynArray, int order){
cout << "Zadejte prvky pole radu " << order << endl;
for(int i=0; i< order; i++){
for(int j=0; …Run Code Online (Sandbox Code Playgroud)