矩阵

推荐系统算法框架

心不动则不痛 提交于 2020-03-05 12:08:24
在介绍矩阵分解之前,先让我们明确下推荐系统的场景以及矩阵分解的原理。对于 推荐系统来说存在两大场景即评分预测(rating prediction)与Top-N推荐 (item recommendation,item ranking)。 评分预测场景主要用于评价网站,比如用户给自己看过的电影评多少分(MovieLens),或者用户给自己看过的书籍评价多少分。其中矩阵分解技术主要应用于该场景。 Top-N推荐场景主要用于购物网站或者一般拿不到显式评分信息的网站,即通过用户的隐式反馈信息来给用户推荐一个可能感兴趣的列表以供其参考。其中该场景为排序任务,因此需要排序模型来对其建模。因此,我们接下来更关心评分预测任务。 Ref: https://zhuanlan.zhihu.com/p/35262187 Ref: https://zhuanlan.zhihu.com/p/27502172 来源: CSDN 作者: 人鱼线 链接: https://blog.csdn.net/qfikh/article/details/104655674

刷题__2_二维数组中的查找

为君一笑 提交于 2020-03-05 07:14:47
1.描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5 ,返回 true。 给定 t arget = 20 ,返回 false。 2.想法: 仔细地观察会发现该矩阵有一个特点,就是任选一数字,同一列中比该数大的在它的下方,同一行比该数小的在它的前方,于是我们可以从右上角开始变换行或者列来找寻该数。 3.答题: 第一次答题: class Solution ( object ) : def findNumberIn2DArray ( self , matrix , target ) : """ :type matrix: List[List[int]] :type target: int :rtype: bool """ m = len ( matrix [ 0 ] ) n = len ( matrix ) column = m - 1 row = 0 while row <=

Python去重操作及相关函数

瘦欲@ 提交于 2020-03-05 07:05:47
栗子1:利用 set L1 = ( 1 , 1 , 2 , 2 , 3 , 3 ) print ( set ( L1 ) ) 结果为: {1, 2, 3} 栗子2:利用 np.unique import numpy as np L1 = ( 1 , 1 , 2 , 2 , 3 , 3 ) print ( np . unique ( L1 ) ) 结果为: [1 2 3] 栗子3:利用循环 import numpy as np L1 = ( 1 , 1 , 2 , 2 , 3 , 3 ) L2 = list ( L1 ) L3 = [ ] for i in L2 : if i not in L3 : L3 . append ( i ) print ( L3 ) 结果为: [1, 2, 3] 以下来自博客: Python 二维数组元素去重 np.unique()函数的使用 ### 4.2 元素去重 import numpy as np # 4.2.1 一维数组去重 a = np . array ( [ 1 , 2 , 3 , 4 , 5 , 5 , 7 , 3 , 2 , 2 , 8 , 8 ] ) print ( '去重前:' , a ) b = np . unique ( a ) print ( '去重后:' , b ) # 4.2.2 二维数组去重 c = np . array

二维数组联通子数组和最大

青春壹個敷衍的年華 提交于 2020-03-05 07:02:46
题目要求: 返回一个二维整数数组中最大联通子数组的和。 输入一个二维整形数组,数组里有正数也有负数。 文件输出。 思路 :和之前的动态规划相识,把二维数组转换为一维数组,先求每一个列的子数组和最大,最后在用正数就加,负数就跳过的方法独立判断 #include<iostream> using namespace std; #include<ctime> #include<fstream> void main() { int m,n,i,j,smark,mmark,t2; int sum; int up[100],down[100],t[100]; int a[100][100],b[100]; cout<<"输入二维数组的行"<<endl; cin>>m; cout<<"输入二维数组的列"<<endl; cin>>n; for(i=0;i<m;i++) { for(j=0;j<n;j++) { cin>>a[i][j]; } } //输入二维数组 for(i=0;i<m;i++) { for(j=0;j<n;j++) { b[j]=a[i][j]; } int c[100]={0}; int sum1=0,max1=0,k; for(k=0;k<n;k++) //在列上求每一个最大子数组 { if(sum1<0) { sum1=b[k]; } else { sum1=sum1+b[k

C&C++ 动态二维数组

我的梦境 提交于 2020-03-05 03:45:21
1. 动态二维数组   目的:方便的构造一个m行n列的矩阵 2. 简单实现   这里用函数模板写   C++不支持函数模板的分离编译,因此需要把声明实现都写在一个文件里   myarray.h: 1 #ifndef TESTCPLUS_MYARRAY_H 2 #define TESTCPLUS_MYARRAY_H 3 4 #include <iostream> 5 using namespace std; 6 template <typename T> 7 /* 8 功能:malloc申请空间部分成功,部分失败,则回收成功的部分 9 */ 10 static void freePartMatrix(T** pary,int i) 11 { 12 for(int j=i-1;j>=0;j--) { 13 if(pary[j] != nullptr) { 14 free(pary[j]); 15 pary[j] = nullptr; 16 } 17 } 18 free(pary); 19 } 20 /* 21 功能:获取一个m行n列的二维数组,或者说一个m行n列的矩阵 22 函数模板 23 */ 24 template <typename T> 25 T** getMNMatrix(int m,int n) 26 { 27 if(m<1 || n<1) { 28 return

线性代数知识点总结

我只是一个虾纸丫 提交于 2020-03-04 23:26:12
直观理解线性代数的本质 如何理解矩阵特征值以及特征向量? 一篇很好的文章 A x = λ x Ax = \lambda x A x = λ x 可以把A看成是一个线性变换,那么这个定义可以看成对于向量x而言,在A的作用下保持方向不变(可能反向),进行大小为 λ \lambda λ 的缩放。 特征向量所在的直线包含了所有特征向量. 矩阵乘以特征向量可以看成是矩阵在每个特征向量方向上的投影。通过求特征值和特征向量把矩阵数据投影在一个正交的空间,而且在各个方向的投影大小就是特征值。 最大特征值并不是说数据在所有方向的投影的最大值,而仅限于正交空间的某一方向。最大特征值的特征向量所对应的方向就是速度最大的方向。 其实是一种数据的处理方法,可以简化数据。 特征值特征向量的重要例子 :数据挖掘中PCA(主成分分析)用于数据降维 详情点击 什么是相似矩阵?有什么用? ![{%asset_img 2.png%}](https://img-blog.csdnimg.cn/202003041016572.png) 线性变换 例如: y ⃗ = A x ⃗ \vec{y} = A\vec{x} y ​ = A x (类似于一次函数 y = x) 线性变换通过指定基下的矩阵A来表示 同一个线性变换,不同基下的矩阵称为相似矩阵.(任意向量在不同的基中有不同的表示)

查找二维数组中是否存在目标值

谁说胖子不能爱 提交于 2020-03-04 19:50:48
在一个二维数组中,该数组满足所有行从左至右递增,所有列满足从上到下递增。给定一目标值Target,若数组中存在该值,则返回true,否则返回false。 分析: 数字所有行从左到右递增,所有行从上到下递增,则每次将目标值与数组右上角的值进行比较,若相等则返回True,若小于该值,则到下一行,若大于该值,则到前一列。 代码如下: class Solution { public : bool findNumber ( vector < vector < int >> & matrix , int target ) { if ( matrix . empty ( ) ) return false ; int height = matrix . size ( ) - 1 ; int width = matrix [ 0 ] . size ( ) - 1 ; int h = 0 ; while ( h <= height && width >= 0 ) { if ( matrix [ h ] [ width ] == target ) return true ; else if ( matrix [ h ] [ width ] < target ) h ++ ; else width -- ; } return false ; } } 来源: CSDN 作者: 2020向前冲_ 链接:

C#的集合类型及使用技巧

Deadly 提交于 2020-03-04 18:51:01
在日常开发过程中,我们不能避免的要对批量数据处理,这时候就要用到集合。集合总体上分为线性集合和非线性集合。线性集合是指元素具有唯一的前驱和后驱的数据结构类型;非线性集合是指有多个前驱和后驱的数据结构类型,如树和图。我们这里主要讲常用的线性集合,常用的线性集合有数组、ArrayList、List、Hashtable(哈希表)、Dictionary(字典)、Stack(堆栈集合)、Queue(队列集合)等。 一、数组 数组是一个存储相同类型元素的固定大小的顺序集合。数组属于引用类型,它继承System.Array类,System.Array是所有数组的基类。 1、一维数组 一维数组声明方式: //声明一个长度为5的int类型一维数组 int[] numbers = new int[5]; 一维数组的初始化方式有以下三种写法: //一维数组的初始化方式 int[] numbers1 = new int[5] {1,2,3,4,5};//指定大小和元素,使用条件是数组大小必须与元素个数相匹配。 int[] numbers2 = new int[] {1,2,3,4,5};//不指定数组大小,因为编译器会自动统计元素的个数。 int[] numbers3 = { 1, 2, 3, 4, 5 };//这是更简化的形式,直接使用花括号声明和初始化数组。 访问数组元素: 在声明和初始化数组后

基于LDA的SRDA算法

☆樱花仙子☆ 提交于 2020-03-04 17:27:25
LDA 线性判别分析 (LDA)是一种常用的保持类别可分性的特征提取方法。LDA的投影函数通常是通过 最大化类间协方差和同时最小化类内协方差 得到的。它被广泛应用于信息处理的许多领域,如机器学习、数据挖掘、信息检索和模式识别等。然而,LDA的计算涉及到密集矩阵的特征分解,这在时间和内存上都很昂贵。具体来说,LDA具有O(m n t+t3)时间复杂度,需要O(m n+mt+nt)内存,其中m是样本数,n是特征数,t=min(m,n)。当m和n都较大时,应用LDA是不可行的。 基于统计分析的子空间方法 分析人脸识别的主流方法是基于统计分析的子空间方法 人脸的图像维数通常很大,而其在高维空间分布很不紧凑,不利于分类,而且计算复杂度很大,因此通常将图像投影到低维的子空间进行判别。 子空间方法是根据一定目标来找线性或者非线性的变换,使原始信号压缩到一个低维的子空间中,让数据在该子空间的分布更加紧凑为数据的描述提供更好的手段,并且使其计算复杂度降低。 子空间有向图嵌入 用一个低维向量来表示图上的点,此向量保持了数据点间的相似度,此相识度可通过具有数据点集统计或者几何性的相似矩阵来描述。 点的向量表达式由一定约束条件下拉普拉斯矩阵的主要特征值对应的特征向量确定。 谱方法理论 谱方法是数学领域里一种经典的分析和代数方法,在高维数据的低维表示和聚类问题中有着广泛的应用。

二维数组中的查找 --剑指offer

扶醉桌前 提交于 2020-03-04 12:57:07
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路 : 选择左下角点(右上点)都可以,因为这两个点比较特别 比同行的都小(大),比同列的都大(小) 这里我选的是左下点 public boolean Find(int target, int [][] array) { if(array == null){ return false; } int row=array.length; int col=array[0].length; int j =0; int i =row; while(j < col && i > 0){ if(target > array[i-1][j]){ j ++; } else if(target < array[i-1][j]){ i --; } else { return true; } } return false; } 来源: https://www.cnblogs.com/nlw-blog/p/12408821.html