创建新矩阵及特殊类型矩阵生成指南

版权申诉
0 下载量 178 浏览量 更新于2024-11-12 收藏 437KB RAR 举报
资源摘要信息:"矩阵创建与生成方法在MATLAB中的应用" MATLAB(Matrix Laboratory的缩写)是一种用于数值计算、可视化以及编程的高性能语言和交互式环境。矩阵是MATLAB中最基本的数据结构,几乎所有的数学计算都围绕着矩阵来展开。在MATLAB中创建和操作矩阵是进行科学计算的基础。以下将详细介绍在MATLAB中如何创建新矩阵,包括建立新矩阵、生成空矩阵、向量和子矩阵的生成,以及MATLAB中特殊矩阵的生成方法。 1. 建立新矩阵: 在MATLAB中,创建新矩阵可以通过直接赋值的方式进行,其基本语法是使用方括号[]来定义矩阵的行和列。例如,创建一个2×2的矩阵A,可以使用以下命令: ```matlab A = [1, 2; 3, 4]; ``` 这里,数字之间用空格或逗号分隔代表列元素,分号";"代表行之间的分隔。上述命令创建了一个包含1, 2, 3, 4这四个元素的矩阵,其中1和2组成第一行,3和4组成第二行。 2. 空矩阵: 在某些计算场景中,可能需要创建一个没有任何元素的矩阵,即空矩阵。在MATLAB中,可以使用空方括号[]或者zeros函数创建空矩阵。例如,创建一个空的2×3矩阵可以使用以下命令: ```matlab B = []; ``` 或者 ```matlab B = zeros(2, 3); ``` 使用空方括号[]创建的空矩阵没有任何预设的大小限制,而使用zeros函数则可以直接指定矩阵的行数和列数。 3. 向量和子矩阵的生成: 向量是特殊的矩阵,只有一行或一列。在MATLAB中,创建向量可以不使用分号分隔行,直接使用逗号或空格分隔元素即可。例如: ```matlab v = [1, 2, 3]; ``` 生成子矩阵是指从已有的矩阵中提取一部分元素形成新的矩阵。这通常通过索引操作来完成,比如要从矩阵A中提取第一行第一列到第一行第二列的子矩阵,可以使用以下命令: ```matlab A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; subA = A(1, 1:2); ``` 这里,subA将包含元素1和2,即矩阵A的第一行第一列到第二列。 4. MATLAB中的特殊矩阵: MATLAB提供了一些特殊的函数来生成常用的矩阵类型,例如: - 单位矩阵:使用eye函数可以生成单位矩阵。例如,生成一个3×3的单位矩阵: ```matlab I = eye(3); ``` - 零矩阵:使用zeros函数可以生成一个元素全为零的矩阵。例如,生成一个2×3的零矩阵: ```matlab Z = zeros(2, 3); ``` - 随机矩阵:使用rand函数可以生成一个元素为0到1之间均匀分布的随机矩阵。例如,生成一个3×3的随机矩阵: ```matlab R = rand(3, 3); ``` - 对角矩阵:使用diag函数可以从一个向量生成一个对角矩阵。例如,从向量v生成对角矩阵: ```matlab D = diag(v); ``` 以上就是在MATLAB中进行矩阵创建和生成的基本方法和知识点。掌握这些基本操作对于进行更高级的数学计算和工程应用是至关重要的。

逐行分析下面的代码:import random import numpy as np import pandas as pd import math from operator import itemgetter data_path = './ml-latest-small/' data = pd.read_csv(data_path+'ratings.csv') data.head() data.pivot(index='userId', columns='newId', values='rating') trainSet, testSet = {}, {} trainSet_len, testSet_len = 0, 0 pivot = 0.75 for ele in data.itertuples(): user, new, rating = getattr(ele, 'userId'), getattr(ele, 'newId'), getattr(ele, 'rating') if random.random() < pivot: trainSet.setdefault(user, {}) trainSet[user][new] = rating trainSet_len += 1 else: testSet.setdefault(user, {}) testSet[user][new] = rating testSet_len += 1 print('Split trainingSet and testSet success!') print('TrainSet = %s' % trainSet_len) print('TestSet = %s' % testSet_len) new_popular = {} for user, news in trainSet.items(): for new in news: if new not in new_popular: new_popular[new] = 0 new_popular[new] += 1 new_count = len(new_popular) print('Total movie number = %d' % new_count) print('Build user co-rated news matrix ...') new_sim_matrix = {} for user, news in trainSet.items(): for m1 in news: for m2 in news: if m1 == m2: continue new_sim_matrix.setdefault(m1, {}) new_sim_matrix[m1].setdefault(m2, 0) new_sim_matrix[m1][m2] += 1 print('Build user co-rated movies matrix success!') print('Calculating news similarity matrix ...') for m1, related_news in new_sim_matrix.items(): for m2, count in related_news.items(): if new_popular[m1] == 0 or new_popular[m2] == 0: new_sim_matrix[m1][m2] = 0 else: new_sim_matrix[m1][m2] = count / math.sqrt(new_popular[m1] * new_popular[m2]) print('Calculate news similarity matrix success!') k = 20 n = 10 aim_user = 20 rank ={} watched_news = trainSet[aim_user] for new, rating in watched_news.items(): for related_new, w in sorted(new_sim_matrix[new].items(), key=itemgetter(1), reverse=True)[:k]: if related_new in watched_news: continue rank.setdefault(related_new, 0) rank[related_new] += w * float(rating) rec_news = sorted(rank.items(), key=itemgetter(1), reverse=True)[:n] rec_news

2023-06-02 上传