【记录】MATLAB矩阵的批量元素修改方式,与Python的NumPy对比
文章目录
二维矩阵
以二维矩阵a为例。
1 matlab
:
a=[1 -2 3;-4 5 0]; % 定义矩阵a
disp(a); % 打印矩阵a
结果:
2 python
:
import numpy as np
a = np.array([[1, -2, 3],[4, 5, 0]]) # 定义矩阵a
print (a) # 打印矩阵a
结果:
操作
1. 将数组大于0的数全部加1
1 matlab
:
a(a>0)=a(a>0)+1;
同理,只要改括号内的条件,就可以修改其他元素。
2 python
:
使用Numpy的内置索引。
a[a>0]=a[a>0]+1
2. 删除元素
①删除单个元素
1 matlab
:
a(2)=[];
注意索引从1开始,并且顺序如下:
删除后:1 -2 5 3 0
。
2 python
:
a = np.delete(a, 2)
索引从0开始,顺序如下:
删除后:1 -2 4 5 0
。
②删除一列元素
1 matlab
:
a(:,2)=[];
:
表示选择所有行,2
表示选择第二列的元素,综合起来表示删除第2列。
2 python
:
a = np.delete(a, 2, 1)
删除第3列。第三个参数为1时删除列,为0删除行。
其余删除操作同理。
3. 添加一行或多行
①添加一行
1 matlab
:
row=[1 2 3];
a=[a;row];
2 python
:
可用append
或insert
。
row = np.array([1, 2, 3])
a = np.append(a,[row],axis= 0)
#a = np.insert(a, 2, row, axis=0) # 插入成为第3行
同样地,第三个参数为1时列操作,为0行操作。
②添加多行
1 matlab
:
row=[1 2 3;2 4 5;7 8 9];
a=[a;row];
2 python
:
row = np.array([[1, 2, 3],[2, 4, 5],[7, 8, 9]])
a = np.append(a,row,axis= 0)
#a = np.insert(a, 2, row, axis=0) # 插入成为第3行
注意中括号[]
。
4. 获取行/列数
1 matlab
:
[row,line]=size(a); % 行,列
row=size(a,1); % 行
line=size(a,2); % 列
2 python
:
(row, line) = a.shape # 行,列
row = a.shape(0) # 行
line = a.shape(1) # 列
5. 格式化输出数组
1 matlab
:
对于数值数组、字符数组或字符串数组,可用mat2str
:
a=mat2str(a); % mat格式转换成字符串
a=strrep(a,' ',','); % 将空格替换成,符号
a=strrep(a,';','],['); % 将分号替换成"],["
disp(a);
mat2str
也支持数字有效位数设定,不展开讲了,感兴趣见mat2str(Convert matrix to characters)_MathWorks。
自定义性更高的遍历输出:
for row=1:size(a,1)
fprintf("[");
for line=1:size(a,2)
fprintf("%d",a(row,line));
if(line==size(a,2))
fprintf("]");
else
fprintf(",");
end
end
if(row==size(a,1))
fprintf("\n");
else
fprintf(",");
end
end
结果均为:
2 python
:
a = np.array2string(a, separator=',') # 用逗号作为分隔符
a = a.replace('\n','') # 去除换行
print (a)
结果:
参考:stackoverflow_string-representation-of-a-numpy-array-with-commas-separating-its-elements
设置np输出元素格式可用np.set_printoptions
。
不展开讲了。感兴趣见“numpy.set_printoptions_NumPy 1.22 中文”。
结构数组
以结构数组s为例。
1 matlab
:
row=4; % 行数
line=1; % 列数
s(row,line) = struct('i',0,'F',0.1,'Matrixs',[]); % 定义三个元素
% 只初始化第二个元素
s(2).i=2;
s(2).F=0.2;
s(2).Matrixs=[1 2 3;4 5 6];
disp(s);
结果:
可以看到,最开始初始化的元素,只对最后一个元素生效,也就是元素s(row,line)。所以不要想着用这种方式直接初始化。可以循环初始化。
2 python
:
import numpy as np
type = np.dtype({'names':['i','F','Matrixs'],'formats':['i4','f8','(4,3)i4']})
s = np.rec.array([(0, 0.1, [[0,0,0],[0,0,0],[0,0,0],[0,0,0]])]*4, dtype=type)
s[1].i=2;
s[1].F=0.2;
s[1].Matrixs=[[1,2,3],[4,5,6],[0,0,0],[0,0,0]]
print (s)
numpy
貌似不支持创建形状不确定的子数组,就像c语言里创建数组需要提前告知数组总大小一样(这里我开辟的是4*3
)。
但matlab
类型根本不用自己定义,随便加什么都可以,这波我站matlab
。
结果:
操作
1. 筛选i小于1的元素
1 matlab
:
s=s([s.i]<1); % 注意中括号
注意,当结构数组中有未定义的[]
时,该筛选方法可能出错,请保证空值已经赋值完毕。
出错样例如:
s=s([s.i]>0);
得到的结果是:
这是因为[]
在matlab
中是空值,[s.i]
会自动删掉空值,在本例中只剩下两项2 0
,大于0的是2,索引是1。但1对应的实际元素是s(1)
,而不是s.i==2
的s(2)
。
2 python
:
s=s[s.i<1]
结果:
2. 格式化输出结构数组中的数组
1 matlab
:
对于结构数组中的数组,我尚未想到一次性完整提取其中所有数组的方式,可循环提取再输出:
for i=1:size(s,1)
a=mat2str(s(i).Matrixs); % mat格式转换成字符串
a=strrep(a,' ',','); % 将空格替换成,符号
a=strrep(a,';','],['); % 将分号替换成"],["
disp(a);
end
结果:
2 python
:
a = np.array2string(s.Matrixs, separator=',') # 用逗号作为分隔符
a = a.replace('\n','') # 去除换行
print (a)
python
不用循环,稍微方便一些。
如果以后还用到别的,再补充。
【记录】MATLAB矩阵的批量元素修改方式,与Python的NumPy对比的更多相关文章
- Matlab矩阵学习二 矩阵的修改
Matlab矩阵的修改 一.元素修改 (1).矩阵扩充 (2)矩阵删除某行或某列 删除某行:A(m,:)=[] %删除A矩阵的第m行 删除某列: A(:,n)=[] %删除A矩阵的第n列 ...
- Matlab中矩阵的平方和矩阵中每个元素的平方介绍
该文章讲述了Matlab中矩阵的平方和矩阵中每个元素的平方介绍. 设t = [2 4 2 4] 则>> t.^2 ans = 4 164 16 而>> t^2 ans = ...
- matlab矩阵合并及相关运算
1.matlab允许向量(和矩阵)合并,且matlab提供了两种合并方式,[a,b]和[a;b],两者的结果是不一样的. a=rand(2,3): b=rand(2,3): c=[a;b]: d=[a ...
- matlab矩阵的表示和简单操作
原地址:http://www.cnblogs.com/Ran_Ran/archive/2010/12/11/1903070.html 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必 ...
- Matlab 矩阵【Mark】
一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间用”;”(或回车符)隔开: d.矩阵的元素可以 ...
- Matlab矩阵基本操作(定义,运算)
转自:http://blog.csdn.net/perfumekristy/article/details/8119861 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ...
- MATLAB矩阵操作大全
转载自:http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示 在MATLAB中创建矩阵 ...
- MATLAB矩阵的表示
矩阵是matlab中最基本的数据对象. l 矩阵的建立 l 冒号表达式 l 结构矩阵和单元矩阵 1.矩阵的建立 (1)利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素 ...
- Matlab矩阵学习一 矩阵的创建
Matlab矩阵创建 1.直接输入数值创建 矩阵元素要用[ ] 括起来,";"代表一行结束,以下创建方式也是合法的,矩阵的元素可以是实数,也可以是复数,复数用a+bi表 ...
- sqlserver数据库批量新增修改类
MSSql Server 数据库批量操作 需要引用的命名空间 using System; using System.Collections.Generic; using System.Data; us ...
随机推荐
- C盘扩展卷碰到的那些事-->不是同一块物理磁盘操作扩展卷是有坑的
自己电脑上面用过win10系统资源管理器扩展卷的功能,用过几次都成功扩容了磁盘空间,简单说一下原理: 就是将剩余未分配的磁盘空间划给要扩展的磁盘. 这天公司的电脑C盘老是红色提示空间不足,那就扩充容量 ...
- 前端视角看 HTTPS
最近用Docusaurus搭了一个个人网站,部署后看到浏览器地址栏上"不安全"三个字感觉特别辣眼,便不由自主的想起了HTTPS.回忆起自己在日常开发中遇到的一些与HTTPS相关的知 ...
- LINUX 服务器安装nginx redis jdk等步聚
1.安装指令步聚 sudo yum update 更新linux系统 yum install -y nginx 安装nginx systemctl enable nginx 设置开机启动nginx s ...
- ES6语法糖,超甜!
ES6 语法糖 1. ... ... 表示取出可遍历数组中的内容. const arr = new Array() const numbers = [1,2,3,4,5] arr.push(...nu ...
- autMan奥特曼机器人--可爱猫对接微信教程
教程开始 文章底部下载可爱猫框架以及对应的微信版本 1.安装3.4.0.38版本微信,解压可爱猫框架压缩包 如果微信安装了高于3.4.0.38的版本,请先卸载 2.打开可爱猫框架,会弹微信扫码登录,机 ...
- 光猫路由器设置-改桥接、开启UPNP和DMZ的教程
疑难解答加微信机器人,给它发:进群,会拉你进入八米交流群 机器人微信号:bamibot 简洁版教程访问:https://bbs.8miyun.cn 以电信光猫举例,其他网络百度都有对应教程. 电信光猫 ...
- 推荐一款最新开源,基于AI人工智能UI自动化测试工具!支持自然语言编写脚本!
随着互联网技术的飞速发展,Web应用越来越普及,前端页面也越来越复杂.为了确保产品质量,UI自动化测试成为了开发过程中不可或缺的一环.然而,传统的UI自动化测试工具往往存在学习成本高.维护困难等问题. ...
- pandas 判断列是否包含某个字符串
亲测第二种好用 in 语句 不包含使用not in food = df['日期'].values.tolist() if '休息' in food: print(food) if df['共计小时'] ...
- CentOs7 lnmp 安装记录
CentOs7 lnmp 安装记录 安装php 选择安装目录 # eg:/usr/src cd /usr/src 安装必要的源 yum -y install pcre pcre-devel zlib ...
- goland无法识别包
新建 Go 项目时,一定要通过 "File -> New -> Project..." 方式建立,千万不要通过 "File -> Open", ...