【记录】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提供了两种除法运算:左除(\)和右除(/).一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解.例:a=[1 2 3; 4 2 6; 7 4 9]b ...
- ElasticSearch 学习记录之Text keyword 两种基本类型区别
ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...
- python 多线程两种实现方式,Python多线程下的_strptime问题,
python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26 44021 0 目前python 提供了几种多线程实现方式 thread,t ...
- python计算机硬件基础以及变量常量常量池,解释器编译器比较,python的两种运行方式
1.什么是编程语言 语言是一个事物与另外一个事物沟通的介质 编程语言是程序员与计算机沟通的介质 2.什么是编程 编程就是程序按照某种编程语言的语法规范将自己想要让计算机做的事情表达出来 表达的结果就是 ...
- Python的两种运行方式
从2015年5月19日注册博客园,立志于要通过写博客的方式,记录自己编程的点点滴滴,由于自己太懒,一直拖到现在,“拖延症”是病得改,今天终于写自己第一篇博客了,有点小激动! Python是由Guido ...
- 两种语言实现设计模式(C++和Java)(一:工厂模式)
本篇开始记录实现设计模式在工作中的两种常见语言上的实现. 本篇介绍最简单的工厂模式. 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品,使用产 ...
- 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"
在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...
- 【Python】python 多线程两种实现方式
目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更 ...
- 快速排序quick_sort(python的两种实现方式)
排序算法有很多,目前最好的是quick_sort:unstable,spatial complexity is nlogN. 快速排序原理 python实现 严蔚敏的 datastruct书中有伪代码 ...
- 使用OC和Swift两种语言写一个发射烟花的小项目
OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同,附带源码. OC代码样式: self.view.backgroundColor = [UIColor blackCol ...
随机推荐
- Luogu P3975 TJOI2015 弦论 题解 [ 紫 ] [ 后缀自动机 ] [ 动态规划 ] [ 拓扑排序 ]
弦论:本来不想写板子题题解的,但奈何这道题的题解都太垃圾了,导致我理解了一个晚上都没想明白 dp 转移啥意思/fn/fn/fn,所以记录一下. 思路 \(t=0\) 时 考虑 SAM 思路,建出后缀自 ...
- [BZOJ4833] 最小公倍佩尔数 题解
在这篇题解中,我会将各个部分的证明分成不同的推导过程,以达到逐一击破的效果. 引理 1:\(f(n)=2f(n-1)+f(n-2)\) 我的证明挺繁琐的,过程如下: \[(1+\sqrt 2)^{n- ...
- Vue3响应式编程三剑客:计算属性、方法与侦听器深度实战指南
在Vue3开发中,计算属性.方法和侦听器是处理数据逻辑的核心工具.它们各自有不同的作用和适用场景,合理使用这些工具可以显著提升代码的可读性和性能.本篇将深入探讨这三者的定义.使用场景以及实际案例,并通 ...
- Ansible - [02] 基础配置以及常用操作场景
Ansible 基础配置 主配置文件:/etc/ansible/ansible.cfg ansible配置文件查找顺序 首先检测ANSIBLE_CONFIG变量定义的配置 其次检查当前目录下的./an ...
- python 二级 基本数据类型
1.思维导图 需要特殊记忆知识点 -1.01E-3值为 0.00101 基本运算一共9个: 取整 a//b 取余数 a%b x的y次幂 :x**y 数值运算函数 format 格式的控制 常用的操作 ...
- kubectl port-forward bind: address already in use unable
前言 本地的 8080 映射到 Pod 的 80,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod kubectl port-forward wp-pod 8080:80 & ...
- mac地址查询
打开命令提示符窗口(cmd程序) 快捷键 win+r 打开运行窗口,输入 cmd 命令打开 命令提示符窗口 或者点击开始菜单,在搜索程序和文件输入框,输入 cmd(会找到进入dos命令的cmd程序) ...
- JOKER智能可视化平台 20250204版本更新说明
本次 JOKER 低代码平台更新涵盖了代码生成.环境变量.可视化开发工具等多个关键领域的优化与新增功能,致力于为开发者提供更高效.更安全.更便捷的开发体验.同时,服务端功能的正式发布以及核心升级,进一 ...
- 本地项目上传到gitee
前置条件:本地已经装好了GIt和GITEE有远程地址 检查本地装好了GIT:鼠标右键 检查准备好了远程:地址 本地项目拷贝到目录 D:\tmp2024-02-19\code 本地项目所在文件夹打开gi ...
- Anaconda指定目录安装终极指南+避坑大全
最近被Python环境搞疯了吧?一个项目跑起来另一个就报错?用Conda环境隔离大法就对了!但默认安装竟吃掉根分区8G的硬盘?今天手把手教你迁移安装目录+实战部署AI项目. 今天测试AIREPORT, ...