二维矩阵

以二维矩阵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:
可用appendinsert

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==2s(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|两种语言的数组/矩阵中元素修改方式的总结和对比的更多相关文章

  1. 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 ...

  2. ElasticSearch 学习记录之Text keyword 两种基本类型区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  3. python 多线程两种实现方式,Python多线程下的_strptime问题,

    python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26  44021  0 目前python 提供了几种多线程实现方式 thread,t ...

  4. python计算机硬件基础以及变量常量常量池,解释器编译器比较,python的两种运行方式

    1.什么是编程语言 语言是一个事物与另外一个事物沟通的介质 编程语言是程序员与计算机沟通的介质 2.什么是编程 编程就是程序按照某种编程语言的语法规范将自己想要让计算机做的事情表达出来 表达的结果就是 ...

  5. Python的两种运行方式

    从2015年5月19日注册博客园,立志于要通过写博客的方式,记录自己编程的点点滴滴,由于自己太懒,一直拖到现在,“拖延症”是病得改,今天终于写自己第一篇博客了,有点小激动! Python是由Guido ...

  6. 两种语言实现设计模式(C++和Java)(一:工厂模式)

    本篇开始记录实现设计模式在工作中的两种常见语言上的实现. 本篇介绍最简单的工厂模式. 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品,使用产 ...

  7. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  8. 【Python】python 多线程两种实现方式

    目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更 ...

  9. 快速排序quick_sort(python的两种实现方式)

    排序算法有很多,目前最好的是quick_sort:unstable,spatial complexity is nlogN. 快速排序原理 python实现 严蔚敏的 datastruct书中有伪代码 ...

  10. 使用OC和Swift两种语言写一个发射烟花的小项目

    OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同,附带源码. OC代码样式: self.view.backgroundColor = [UIColor blackCol ...

随机推荐

  1. SHA1字符串加密

    使用SHA1算法,生成某个字符串的hash值作为该字符串所代表对象的唯一标识: Demo: using System; using System.Collections.Generic; using ...

  2. day:2 软件测试流程——H模型

    软件测试流程_H 模型 一.详细流程 1.产品召开需求澄清会议,产品.开发.测试都参加 2.测试和开发拿到需求 3.测试经理拿到需求,根据需求编写测试计划 测试计划(内容:测试目的,背景,范围,测试准 ...

  3. 当 GPT 告诉我9.11大于9.9的时候:AI 仍需完善的一面

    在当今 AI 技术飞速发展的时代,我们对其能力寄予了厚望,期待它们能够准确无误地处理各种任务.然而,最近发生的一件事情让我们意识到,AI 仍然有需要改进和完善的地方. GPT 作为一款备受瞩目的语言模 ...

  4. vue - [02] 安装部署

    Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面. 001 || 通过CND快速开始 只需要在HTML文件中引入VUE的CDN链接即可 (1)创建HTML文件 <!DOC ...

  5. manim边学边做--场景Scene简介

    在 Manim 社区版本中,Scene(场景)是构建动画的核心概念之一,它为我们提供了一个结构化的方式来组织和呈现动画内容. 本文将介绍什么是Scene,它在Manim动画中的作用,以及不同类型的Sc ...

  6. Windows服务器等保审核安全设置

    1.开启账户锁定策略 进入Windows服务器,快捷键"WIN+R"打开运行窗口.输入"gpedit.msc"并点击确定,依次点击"计算机配置&quo ...

  7. 自动化-Yaml文件写入函数封装

    1.文件布局 打开文件修改读取方式为w dump函数写入文件 写入中文 使用allow_unicode=True class ReadConfiYaml: def __init__(self,yaml ...

  8. 多主机网络下 Docker Swarm 模式的容器管理

    分类专栏: Services/Server Management Linux Basics Linux资讯 http://www.linuxprobe.com/thread版权导读    本文将以多主 ...

  9. Windows桌面应用自动更新解决方案SharpUpdater5发布

    SharpUpdater是什么 SharpUpdater是一套C#桌面应用自动更新解决方案.基本上,所有自动更新程序的原理都一样:生成一份文件清单,将本地清单与云上清单对比后进行全量更新或增量更新.本 ...

  10. String常见面试题

    第一题:打印的结果是true还是false呢? 在之前我们就说过这题,执行s1时,检查字符串常量池,发现没有"abc",于是创建"abc",执行s2时,接着检查 ...