当前位置: 首页 > news >正文

R语言中的数据结构----矩阵

目录

(1)创建矩阵

(2) 线性代数运算

(3)矩阵索引

(4)矩阵元素的筛选

(5)增加或删除矩阵的行或列

(6)apply()函数

(7)矩阵和向量的区别

(8)避免意外降维

(9)矩阵行和列的命名

(10)高维数组


矩阵的基本操作

#将c(1,4)和c(1,2)两个向量绑定起来
> m<-rbind(c(1,4),c(2,2))
> m[,1] [,2]
[1,]    1    4
[2,]    2    2
#计算向量(1,1)和m的矩阵积
> m%*%c(1,1)[,1]
[1,]    5
[2,]    4
#第一行第二列
> m[1,2]
[1] 4
#第二行第二列
> m[2,2]
[1] 2
#第一行
> m[1,]
[1] 1 4
#第二列
> m[,2]
[1] 4 2
> 

(1)创建矩阵

法一

> y<-matrix(c(1,2,3,4),nrow=2,ncol=2)
> y[,1] [,2]
[1,]    1    3
[2,]    2    4
#可以只定义nrow和ncol中的一个
> y<-matrix(c(1,2,3,4),nrow=2)
> y[,1] [,2]
[1,]    1    3
[2,]    2    4
#表示创建矩阵第二列
> y[,2]
[1] 3 4

法二

#byrow参数设置为TRUE,使矩阵元素按行排列
> m<-matrix(c(1,2,3,4,5,6),nrow=2,byrow=T)
> m[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6y<-matrix(nrow=2,ncol = 2)
> y[1,1]<-1
> y[2,1]<-2
> y[1,2]<-3
> y[2,2]<-4
> y[,1] [,2]
[1,]    1    3
[2,]    2    4

(2) 线性代数运算

#矩阵相乘
> y%*%y[,1] [,2]
[1,]    7   15
[2,]   10   22
#矩阵数量乘法
> 3*y[,1] [,2]
[1,]    3    9
[2,]    6   12
#矩阵加法
> y+y[,1] [,2]
[1,]    2    6
[2,]    4    8

(3)矩阵索引

•使用逗号,分隔行和列索引来访问矩阵中的元素

# 创建一个3x3的矩阵
mat <- matrix(1:9, nrow = 3)
mat# 访问特定元素
mat[2, 3]  # 访问第2行第3列的元素,输出为6#也可以使用
> "["(z,3,2)
[1] 7
#"["相当于一个函数# 访问整行或整列
mat[1, ]  # 访问第1行的所有元素,输出为 1 4 7
mat[, 2]  # 访问第2列的所有元素,输出为 2 5 8# 访问多行或多列
mat[2:3, ]  # 访问第2行和第3行的所有元素
mat[, c(1, 3)]  # 访问第1列和第3列的所有元素

•使用逻辑向量来选择满足特定条件的行或列

# 创建一个3x3的矩阵
mat <- matrix(1:9, nrow = 3)
mat# 使用逻辑向量进行索引
mat[mat > 5]  # 选择大于5的元素,输出为 6 7 8 9
mat[mat[, 2] > 3, ]  # 选择第2列大于3的行的所有元素

•对一个矩阵的子矩阵进行赋值

> y<-matrix(c(1:6),nrow=3)
> y[,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
#第一行和第三行赋值
> y[c(1,3),]<-matrix(c(1,1,8,12),nrow=2)
> y[,1] [,2]
[1,]    1    8
[2,]    2    5
[3,]    1   12> x<-matrix(nrow=3,ncol=3)
> y<-matrix(c(4,5,2,3),nrow=2)
> y[,1] [,2]
[1,]    4    2
[2,]    5    3
> x[2:3,2:3]<-y
> x[,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA    4    2
[3,]   NA    5    3

(4)矩阵元素的筛选

> x<-matrix(c(1,2,3,2,3,4),nrow=3)
> x[,1] [,2]
[1,]    1    2
[2,]    2    3
[3,]    3    4
#判断第二列元素是否>=3,若>=3,则输出
> x[x[,2]>=3,][,1] [,2]
[1,]    2    3
[2,]    3    4
逐步分解为
> j<-x[,2]>=3
> j
[1] FALSE  TRUE  TRUE
#x[j,]的行与向量j中的取值为TRUE的行对应
> x[j,][,1] [,2]
[1,]    2    3
[2,]    3    4> x<-matrix(c(1:6),nrow=3)
> x[,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> z<-c(5,12,13)
#z%%2==1用于判断z的每个元素是否是奇数,返回的结果是(TRUE,FALSE,TRUE)
#因此我们提取第1,3行的数据
> x[z%%2==1,][,1] [,2]
[1,]    1    4
[2,]    3    6
注意:如果写为以下形式,就不是以矩阵形式显示了
>x[z%%2==1]
[1] 1 3 4 6> x[,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
#这里用了&,表示两个条件都需要判断
> x[x[,1]>1 & x[,2]>5,]
[1] 3 6#which(m>2)来查找矩阵m中大于2的元素的索引
> m<-matrix(c(5,2,9,-1,10,11),nrow=3)
> m[,1] [,2]
[1,]    5   -1
[2,]    2   10
[3,]    9   11
> which(m>2)
[1] 1 3 5 6
#m的1,3,5,6个元素大于2

(5)增加或删除矩阵的行或列

> x<-c(12,5,13,16,8)
> x
[1] 12  5 13 16  8
> x<-c(x,20)
> x
[1] 12  5 13 16  8 20
> x<-c(x[1:3],20,x[4:6])
> x
[1] 12  5 13 20 16  8 20
> x<-x[-2:-4]
> x
[1] 12 16  8 20
> one<-c(1,1,1,1)
> z<-matrix(c(1,2,3,4,1,1,0,0,1,0,1,0),nrow=4)
> z[,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    1    0
[3,]    3    0    1
[4,]    4    0    0
> cbind(one,z)one      
[1,]   1 1 1 1
[2,]   1 2 1 0
[3,]   1 3 0 1
[4,]   1 4 0 0#1被循环补齐为由4个1组成的列向量
> cbind(1,z)[,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    2    1    0
[3,]    1    3    0    1
[4,]    1    4    0    0#和创建向量一样,创建一个新的矩阵很消耗时间
> q<-cbind(c(1,2),c(3,4))
> q[,1] [,2]
[1,]    1    3
[2,]    2    4#可以通过重新赋值来删除矩阵的行或列
> m<-matrix(1:6,nrow=3)
> m[,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6> m<-m[c(1,3),]
> m[,1] [,2]
[1,]    1    4
[2,]    3    6

(6)apply()函数

apply()函数的格式

apply(m,dimcode,f,farge)

m代表一个矩阵

dimcode表示维度代码,1表示每一行应用函数,2表示每一列应用函数

f是应用在行,列上的函数

farge是f的可选参数集

> z<-matrix(c(1:6),nrow = 3)
> z[,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> apply(z,2,mean)
#或者可以直接使用colMeans
> colMeans(z)
[1] 2 5这里的f可以是自定义函数
> f<-function(x){
+ return(x/c(2,8))
+ }
> y<-apply(z,1,f)
> y[,1]  [,2] [,3]
[1,]  0.5 1.000 1.50
[2,]  0.5 0.625 0.75fargs表示可选参数集
> copymag<-function(rw,d){
#向量每个元素对应矩阵的每行,如果该行前d个元素中1较多,向量对应元素就取1,反之取0
+ maj<-sum(rw[1:d])/d
+ return(if(maj>0.5)1 else 0)
+ }
> x<-matrix(c(1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,0),nrow = 4)
> x[,1] [,2] [,3] [,4] [,5]
[1,]    1    0    1    1    0
[2,]    1    1    1    1    0
[3,]    1    0    0    1    1
[4,]    0    1    1    1    0
> apply(x,1,copymag,3)
[1] 1 1 0 1> apply(x,1,copymag,2)
[1] 0 1 0 0
#这里的3,2是函数copymaj()中形式参数d的实际取值,矩阵的第一行是(1,0,1,1,0),当d取3时,前3个是(1,0,1),1占多数,则copymag返回1,第一个元素为1,其他以此类推> apply(x,2,copymag,2)
[1] 1 0 1 1 0

(7)矩阵和向量的区别

> z<-matrix(c(1:8),nrow = 4)
> z[,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
#z作为1个向量,可以求他的长度
> length(z)
[1] 8#z也是一个矩阵,有矩阵的性质
> dim(z)
[1] 4 2
> nrow(z)
[1] 4
> ncol(z)
[1] 2#得到矩阵的行数和列数,[1]显示行数,[2]显示列数
> nrow<-function(x)
+ dim(x)[1]
> nrow(z)
[1] 4
> 

(8)避免意外降维

> z[,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
> r<-z[2,]
> r
[1] 2 6
#这里的r是一个长度为2的向量,而不是一个1*2的矩阵,所以出现了降维,如何避免降维呢可以用以下方法验证
> attributes(z)
$dim
[1] 4 2> attributes(r)
NULL
> str(z)int [1:4, 1:2] 1 2 3 4 5 6 7 8
> str(r)int [1:2] 2 6可以用drop()参数
> r<-z[2,,drop=FALSE]
#r是一个1*2的矩阵
> r[,1] [,2]
[1,]    2    6
> dim(r)
[1] 1 2

(9)矩阵行和列的命名

> z<-matrix(c(1:4),nrow = 2)
> z[,1] [,2]
[1,]    1    3
[2,]    2    4
> colnames(z)
NULL
> colnames(z)<-c("a","b")
> za b
[1,] 1 3
[2,] 2 4
> colnames(z)
[1] "a" "b"
> z[,"a"]
[1] 1 2

(10)高维数组

> firsttest<-matrix(c(46,21,50,30,25,48),nrow=3)
> secondtest<-matrix(c(46,41,50,43,35,49),nrow=3)> test<-array(data=c(firsttest,secondtest),dim=c(3,2,2))#共有2层,每层分别是3行2列
> attributes(test)
$dim
[1] 3 2 2#学生3第一次考试,第二部分的得分
> test[3,2,1]
[1] 48
#逐层显示
> print(test)
, , 1[,1] [,2]
[1,]   46   30
[2,]   21   25
[3,]   50   50, , 2[,1] [,2]
[1,]   46   43
[2,]   41   35
[3,]   50   50

相关文章:

R语言中的数据结构----矩阵

目录 &#xff08;1&#xff09;创建矩阵 &#xff08;2&#xff09; 线性代数运算 &#xff08;3&#xff09;矩阵索引 &#xff08;4&#xff09;矩阵元素的筛选 &#xff08;5&#xff09;增加或删除矩阵的行或列 &#xff08;6&#xff09;apply()函数 &#xff08;…...

Llama-2 推理和微调的硬件要求总结:RTX 3080 就可以微调最小模型

大语言模型微调是指对已经预训练的大型语言模型&#xff08;例如Llama-2&#xff0c;Falcon等&#xff09;进行额外的训练&#xff0c;以使其适应特定任务或领域的需求。微调通常需要大量的计算资源&#xff0c;但是通过量化和Lora等方法&#xff0c;我们也可以在消费级的GPU上…...

C++多线程的用法(包含线程池小项目)

一些小tips: 编译命令如下&#xff1a; g 7.thread_pool.cpp -lpthread 查看运行时间&#xff1a; time ./a.out 获得本进程的进程id&#xff1a; this_thread::get_id() 需要引入的库函数有&#xff1a; #include<thread> // 引入线程库 #include<mutex> //…...

react ant ice3 实现点击一级菜单自动打开它下面最深的第一个子菜单

1.问题 默认的如果没有你的菜单结构是这样的&#xff1a; [{children: [{name: "通用配置"parentId: "1744857774620672"path: "basic"}],name: "系统管理"parentId: "-1"path: "system"} ]可以看到每层菜单的p…...

关于 Qt串口不同电脑出现不同串口号打开失败 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132842297 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...

可观测性在灰度发布中的应用

前言 随着云计算的发展、云原生时代的来临&#xff0c;企业数字化转型进程不断深入&#xff0c;应用开发也越来越多地基于微服务化模式&#xff0c;快速迭代的能力使得应用开发更高效、更灵活。同时&#xff0c;也不得不面临应用版本快速升级所带来的的巨大挑战。 传统的发布方…...

vscode开发油猴插件环境配置指南

文章目录 一、环境配置1.1油猴插件开始编写代码1.2油猴插件配置1.2.1浏览器插件权限1.2.2插件自身权限 2. 油猴脚本API学习2.1 头文件2.2 油猴API 一、环境配置 1.1油猴插件开始编写代码 在vscode 中写入如下代码‘ // UserScript // name cds_test // namespace …...

网站不收录没排名降权怎么处理-紧急措施可恢复网站

网站降权对于SEO人员来说是非常致命的打击&#xff0c;因为网站一旦被搜索引擎降权&#xff0c;排名会严重地下降&#xff0c;网站的流量也会大幅下降&#xff0c;直接影响到收益。而且处理不好的话会导致恢复的时间周期无限拉长&#xff0c;所以网站被降权后我们要第一时间采取…...

C++vector模拟实现

vector模拟实现 1.构造函数2.拷贝构造3.析构赋值运算符重载4.iterator5.modifiers5.1push_back5.2pop_back5.3empty5.4insert5.5erase5.6swap 6.Capacity6.1size6.2capacity6.3reserve6.4resize6.5empty 7.Element access7.1operator[]7.2at 8.在谈reserve vector官方库实现的是…...

《DATASET DISTILLATION》

这篇文章提出了数据浓缩的办法&#xff0c;在前面已有的知识浓缩&#xff08;压缩模型&#xff09;的经验上&#xff0c;提出了不压缩模型&#xff0c;转而压缩数据集的办法&#xff0c;在压缩数据集上训练模型得到的效果尽可能地接近原始数据集的效果。 摘要 模型蒸馏的目的是…...

GDPU 数据结构 天码行空1

1. 病历信息管理 实现病历查询功能。具体要求如下: 定义一个结构体描述病人病历信息(病历号,姓名,症状)&#xff1b;完成功能如下: 输入功能:输入5个病人的信息&#xff1b; 查询功能:输入姓名&#xff0c;在5个病历中进行查找&#xff0c;如果找到则显示该人的信息&#xff0c…...

【C++】红黑树的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…...

【多线程】Thread 类 详解

Thread 类 详解 一. 创建线程1. 继承 Thread 类2. 实现 Runnable 接口3. 其他变形4. 多线程的优势-增加运行速度 二. Thread 类1. 构造方法2. 常见属性3. 启动线程-start()4. 中断线程-interrupt()5. 线程等待-join()6. 线程休眠-sleep()7. 获取当前线程引用 三. 线程的状态1. …...

LINUX 网络管理

目录 一、NetworkManager的特点 二、配置网络 1、使用ip命令临时配置 1&#xff09;查看网卡在网络层的配置信息 2&#xff09;查看网卡在数据链路层的配置信息 3&#xff09;添加或者删除临时的网卡 4&#xff09;禁用和启动指定网卡 2、修改配置文件 3、nmcli命令行…...

refresh rate

1920 x 1080 显卡刷新率 60...

使用 NGINX Unit 实施应用隔离

原文作者&#xff1a;Artem Konev - Senior Technical Writer 原文链接&#xff1a;使用 NGINX Unit 实施应用隔离 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn NGINX Unit 特性集的最新动态之一是支持应用隔离&#xff0c;该特…...

2023/09/12 qtc++

实现一个图形类(Shape) &#xff0c;包含受保护成员属性:周长、面积&#xff0c; 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle) &#xff0c;继承自图形类&#xff0c;包含私有属性:半径 公共成员函数:特殊成员函数…...

全科医学科常用评估量表汇总,建议收藏!

根据全科医学科医生的量表使用情况&#xff0c;笔者整理了10个常用的全科医学科量表&#xff0c;可在线评测直接出结果&#xff0c;可转发使用&#xff0c;可生成二维码使用&#xff0c;可创建项目进行数据管理&#xff0c;有需要的小伙伴赶紧收藏&#xff01; 日常生活能力量表…...

了解消息中间件的基础知识

为什么要使用消息中间件&#xff1f; 解耦&#xff1a;消息中间件可以使不同的应用程序通过解耦的方式进行通信&#xff0c;减少系统间的依赖关系提供异步通信&#xff1a;消息中间件可以实现异步消息传递&#xff0c;提高系统的响应性能。流量削峰&#xff1a;消息中间件可以…...

【linux】Linux wps字体缺失、加粗乱码解决

解决wps字体缺失问题 1、下载字体包 git clone https://github.com/iamdh4/ttf-wps-fonts.git2、创建单独放置字体的目录 mkdir /usr/share/fonts/wps-fonts3、复制字体到系统目录下 cp ttf-wps-fonts/* /usr/share/fonts/wps-fonts4、修改字体权限 chmod 644 /usr/share/f…...

每日两题 103二叉树的锯齿形层序遍历(数组) 513找树左下角的值(队列)

103 题目 103 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,…...

ROS2报错:ImportError: cannot import name ‘Log‘ from ‘rosgraph_msgs.msg‘

在使用ros2的bag命令查看数据集信息时报错 Traceback (most recent call last):File "/opt/ros/noetic/bin/rosbag", line 34, in <module>import rosbagFile "/opt/ros/noetic/lib/python3/dist-packages/rosbag/__init__.py", line 33, in <mo…...

【Vue】Vue中的代码分为哪几种类型?

在 Vue 中的代码可以分为以下几种类型&#xff1a; 1.模板代码 模板代码是 Vue 中用来生成 HTML 的一种语法&#xff0c;可以通过 Vue 的模板语法和指令来动态渲染页面。模板代码一般写在 Vue 组件的 template 标签中。 2.JavaScript 代码 JavaScript 代码是 Vue 组件中用来…...

es6中includes用法

js中的includes用法 1.数组 includes 可以判断一个数组中是否包含某一个元素&#xff0c;并返回true 或者false [a,b,c].includes(a) true [a,b,c].includes(1) false includes可以包含两个参数&#xff0c;第二个参数表示判断的起始位置 起始位置第一个数字是0。 2.字符串 …...

QT中QRadioButton实现分组C++

通过对QRadioButton组件进行分组可解决QRadioButton组件的互斥性 实现如下。 假设已设计好UI并且有UI代码情况&#xff1a; 头文件引用&#xff1a; #include <QButtonGroup> 分组功能 &#xff0c;cpp文件代码实现&#xff1a; Your_Project::Your_Project(QWidge…...

kafka实战报错解决问题

需求 在一个在线商城中&#xff0c;用户下单后需要进行订单的处理。为了提高订单处理的效率和可靠性&#xff0c;我们使用Kafka来实现订单消息的异步处理。当用户下单后&#xff0c;订单信息会被发送到Kafka的一个Topic中&#xff0c;然后订单处理系统会从该Topic中消费订单消…...

vite+react 使用 react-activation 实现缓存页面

对应的版本 "react": "^18.2.0", "react-activation": "^0.12.4", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0",react-activation 这是一个npm包&#xff0c;在react keep alive…...

【android 蓝牙开发——蓝牙耳机】

【android 蓝牙开发——传统蓝牙】 【android 蓝牙开发——BLE&#xff08;低功耗&#xff09;蓝牙 2021-10-09更新】 总结一下蓝牙开发的基本使用以及蓝牙耳机的断开和链接。 所以需权限&#xff1a; <uses-permission android:name"android.permission.ACCESS_FIN…...

Golang goroutine 进程、线程、并发、并行

goroutine 看一个需求 需求&#xff1a;要求统计1-200000000000的数字中&#xff0c;哪些是素数? 分析思路&#xff1a; 1)传统的方法&#xff0c;就是使用一个循环&#xff0c;循环的判断各个数是不是素数&#xff08;一个任务就分配给一个cpu去做&#xff0c;这样很不划算…...

如何做到安全上网

随着信息化的发展&#xff0c;企业日常办公越来越依赖互联网&#xff0c;而访问互联网过程中&#xff0c;会遇到各种各样不容忽视的风险&#xff0c;例如员工主动故意的数据泄漏&#xff0c;后台应用程序偷偷向外部发信息&#xff0c;木马间谍软件的外联&#xff0c;以及各种挖…...

商城的网站建设/实时新闻热点

Node-RED系列文章目前已经写了16篇,介绍了Node-RED的安装以及默认安装的一些基本节点的使用,作为物联网的一个可视化拖动的流程,Node-RED的确实很容易上手。还没开始学习的同学可以先看下我以前的文章。 Node-RED教程(一):Node-RED的介绍与安装 Node-RED教程(二):Node-…...

做视频网站用什么源码/兰州网络推广技术

属性 类型 默认值 autoOpen Boolean true 实例化时是否自动显示对话框。设置为 false 时&#xff0c;使用 open 方法显示对话框。 false 代码示例 创建实例时设置属性值 $(".class").dialog({…...

wordpress hasnavmenu/百度推广的定义

grpc-webMicrosoft已在.NET Core和ASP.NET Core中推出了对gRPC-Web的实验性支持&#xff0c;从而允许直接从.NET Core gRPC客户端和ASP.NET Core gRPC应用程序中调用gRPC-Web。 gRPC-Web与HTTP / 1和HTTP / 2兼容&#xff0c;是一个JavaScript客户端库&#xff0c;支持与gRPC-…...

win7dw做asp购物网站/北京做网站公司哪家好

对于dev的窗体布局我想更系统的专业的学学,不是评自己以往 的经验去做, 所以我看了dev的demo 里边的例子,封装的很严实,还有他们自己重新做的控件,无法直接使用, 关键的控件也上了锁,可能也是保护代码吧,为什么要保护呢, 可能是源码有版权吗,不得而知 总之demo 不易阅读,但也隐…...

开展建设文明网站活动方案/可以免费投放广告的平台

for Text1 in cat uniq1 dofor Text2 in cat uniq2doif [ "$Text1" "$Text2" ]thenecho $Text1 >> thesamefidone done...

文库网站开发建设/企业网站营销的优缺点及案例

2019独角兽企业重金招聘Python工程师标准>>> Actor模型的本质已经被强调了无数遍&#xff1a;万物皆Actor。Actor之间只有发送消息这一种通信方式&#xff0c;例如&#xff0c;无论是管理员让工作者干活&#xff0c;还是工作者把成果交还给管理员&#xff0c;它们之…...