二维空间

数据降维方法小结

帅比萌擦擦* 提交于 2020-02-10 08:40:01
原文:http://blog.csdn.net/yujianmin1990/article/details/48223001  数据的形式是多种多样的,维度也是各不相同的,当实际问题中遇到很高的维度时,如何给他降到较低的维度上?前文提到进行属性选择,当然这是一种很好的方法,这里另外提供一种 从高维特征空间向低纬特征空间映射 的思路。 数据降维的目的   数据降维,直观地好处是维度降低了,便于计算和可视化,其 更深层次的意义在于有效信息的提取综合及无用信息的摈弃 。 数据降维的方法   主要的方法是线性映射和非线性映射方法两大类。 线性映射    线性映射方法的代表方法有:PCA(Principal Component Analysis),LDA(Discriminant Analysis) PCA方法简介   主成分分析的 思想 ,就是线性代数里面的K-L变换,就是 在均方误差准则下失真最小的一种变换 。是将原空间变换到特征向量空间内,数学表示为 A x = λ x 。   特征向量和特征值的意义:分别表示不同频率及其幅度。    特征向量和特征值的直白理解: 想在特征空间内找到某个向量 x ,使得其满足 A x = λ x 。这个式子可以这样理解, A 是空间内的运动, x 经过运动 A 后,保持方向不变(仍是 x 的方向),只是大小伸缩了 λ 倍。这样我们找到了 k

sift算法原理解析

感情迁移 提交于 2020-01-28 21:41:22
尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun 转自: http://blog.csdn.net/zddblog/article/details/7521424 对于初学者,从 David G.Lowe 的论文到实现,有许多鸿沟,本文帮你跨越。 1 、 SIFT 综述 尺度不变特征转换 (Scale-invariant feature transform 或 SIFT) 是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe 在 1999 年所发表, 2004 年完善总结。 其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、 3D 模型建立、手势辨识、影像追踪和动作比对。 此算法有其专利,专利拥有者为英属哥伦比亚大学。 局部影像特征的描述与侦测可以帮助辨识物体, SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT 特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要 3 个以上的 SIFT 物体特征就足以计算出位置与方位

如何理解高维空间

北慕城南 提交于 2020-01-27 15:04:44
如何理解高维空间 超空间理论宣称,有超越人们普遍接受的四维时空的维度存在,宇宙可能确实存在于高维空间中。对此的认识,在世界范围内——包括好几名诺贝尔奖得主中正在扩大。用科学术语来说,超空间理论是以卡鲁查-克莱茵理论和超引力的名称出现的,它的最高级的表述形式被叫为超弦理论。 这一理论甚至预言了精确的维度:10维。通常的4维即空间的3维(长、宽和高)和时间的1维,现在被6个更加宽广的维度所扩展(当然,有些物理学家似乎认为26维更为合理,因为弦只能在10维和26维中自洽的振动)。超弦理论所涉及到的高维空间概念极大的冲击了我们现有的宇宙观,但不可否认的是,这一点已逐渐成为物理学界的主流认识:宇宙可能确实存在于高维空间中。 对我们世界的认识,最牢固的常识性观念可能就是:世界是三维的。不言而喻,长、宽和高已经足以描述我们可见宇宙的所有物体。婴儿和动物实验已经证明,我们固有的观念——世界是三维的——可谓与生俱来。如果我们把时间作为另一维包含进来,那么四维足以记录宇宙中的所有事件。不管我们的仪器探测到哪里,从原子内部直到最遥远的星系团,我们所发现的都是这四维的踪迹。在这样根深蒂固观念的影响下,理解宇宙可能确实存在于高维空间中,这一点变得异常困难。通过观察二维世界中的现象,我们或许能对这一问题有更加直观的认识。 假设有一个二维世界,它是一个巨大的平面。在这个世界里,生活着二维生物,我们称之为“平面人

2020.01.19比赛总结

萝らか妹 提交于 2020-01-20 03:28:37
2020.01.19比赛总结 总分:40 + 0 +30 + 0 = 70 (是的,4题还这么低分) 我luogu和LibreOJ打卡都是大吉呢 被这个2800滋了一下QAQ T1分层最短路,没想到要先分层啊啊啊啊还打错一个细节,别人都是TLE60就我WA40 T2计数题,推了个式子但假的很,不知道为什么连subtask1的分都没有 T3以为是码农题,直接上了个二维线段树当场T飞 T4看一眼就知道是模板数位DP,但一直在搞T3,这题的出题人又脏,直接就是一个100%的数据高精度明着嘲讽你,一点部分分都没,简直tm恶心 打代码之前考虑好时间分配,估算时间空间复杂度,先想清楚再打 来源: CSDN 作者: weixin_43993341 链接: https://blog.csdn.net/weixin_43993341/article/details/104041359

动态数组(一维二维)探秘

隐身守侯 提交于 2019-12-24 18:38:12
因为做leetcode的一道算法题 https://leetcode-cn.com/problems/regular-expression-matching/ ,需要用到二维数组,结果自己在理解和使用上有很大误解,所以单独拿出来,从内存等各方面透彻的梳理一遍。 一维数组 char * a = (char*)malloc(8 * sizeof(char)); memset(a, 0, 8); for (int i = 0; i < 8; i++) { *(a + i) = 'a' + i; } for (int i = 0; i < 8; i++) { cout << *(a+i); } for (int i = 0; i < 8; i++) { cout << a[i]; } free(a); 输出内容abcdefghabcdefgh 这样申请与char a[8]是一样的,不管是底层实现还是使用,都是一样的,这就是一个8个字节长度的数组。我们看内存,也是一段连续的数据。 释放内存的时候,系统可以根据内存管理把这连续的8个字节的空间回收。 二维数组 我们先看一下正常的用法 char a[8][4] = { 0 }; for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { a[i][j] = 'a' + i; } }

计算二维空间中点的集合的最小凸包

匿名 (未验证) 提交于 2019-12-03 00:22:01
from scipy import spatial import numpy as np import matplotlib.pyplot as plt np.random.seed(42) points2d=np.random.rand(10,2)#一组二维平面上的随机点 #convexHull计算包含N维空间中点的集合的最小凸包 ch2d=spatial.ConvexHull(points2d) #绘图 poly=plt.Polygon(points2d[ch2d.vertices],fill=None,lw=2,color='r',alpha=0.5) ax=plt.subplot(aspect='equal') plt.plot(points2d[:,0],points2d[:,1],'go') for i ,pos in enumerate(points2d): plt.text(pos[0],pos[1],str(i),color='blue') ax.add_artist(poly) plt.show() ConvexHull.simplices是凸包每条边线的两个顶点在二维平面上的下标 ConvexHull.vertices是凸多边形的每个顶点在二维平面上的下标 文章来源: 计算二维空间中点的集合的最小凸包

谈谈 C++ 内存管理

对着背影说爱祢 提交于 2019-11-26 17:38:49
有多少个new就有多少个delete 二维动态数组的写法 首先开辟第一维的空间,第一维是char型的指针 char **s = new char *[ 182 ]; 在第一维的基础上,开辟第二维的空间,第二维是不定长度的char型 s[nCounts] = new char [str.length()]; 释放二维动态数组时,规则是由内到外的,先释放第二维的空间,最后再释放第一维的空间 for ( int i = 0 ; i < nCounts; ++ i) { delete[] s[i]; // delete[col] s[i]; s[i] = NULL; } delete[] s; // delete[row] s; s = NULL; s是二维指针,(声明)定义在main函数内,既然定义时在函数内,那么s指针就存放在内存中的栈区域中,使用new动态开辟的空间是在堆区域,堆区域用于存放数据,当然,每个数据都有它的内存地址,因此数据的地址是堆中的某一块地址,而栈中的s只是一个指针,这个指针指向堆区域的指定一块地址,当使用delete释放第二维的空间时,实质是回收堆上的虚拟地址块,而栈内的指针s并无发生变化 实现代码: 1 /// : handleString 2 #include <cstdlib> 3 #include < string > 4 #include <vector