二维矩阵

以二维矩阵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矩阵的修改 一.元素修改 (1).矩阵扩充   (2)矩阵删除某行或某列 删除某行:A(m,:)=[]   %删除A矩阵的第m行   删除某列: A(:,n)=[] %删除A矩阵的第n列 ...

  2. Matlab中矩阵的平方和矩阵中每个元素的平方介绍

    该文章讲述了Matlab中矩阵的平方和矩阵中每个元素的平方介绍.   设t = [2 4 2 4] 则>> t.^2 ans = 4 164 16 而>> t^2 ans = ...

  3. matlab矩阵合并及相关运算

    1.matlab允许向量(和矩阵)合并,且matlab提供了两种合并方式,[a,b]和[a;b],两者的结果是不一样的. a=rand(2,3): b=rand(2,3): c=[a;b]: d=[a ...

  4. matlab矩阵的表示和简单操作

    原地址:http://www.cnblogs.com/Ran_Ran/archive/2010/12/11/1903070.html 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必 ...

  5. Matlab 矩阵【Mark】

    一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间用”;”(或回车符)隔开: d.矩阵的元素可以 ...

  6. Matlab矩阵基本操作(定义,运算)

    转自:http://blog.csdn.net/perfumekristy/article/details/8119861 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ...

  7. MATLAB矩阵操作大全

    转载自:http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示 在MATLAB中创建矩阵 ...

  8. MATLAB矩阵的表示

    矩阵是matlab中最基本的数据对象. l  矩阵的建立 l  冒号表达式 l  结构矩阵和单元矩阵 1.矩阵的建立 (1)利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素 ...

  9. Matlab矩阵学习一 矩阵的创建

    Matlab矩阵创建 1.直接输入数值创建       矩阵元素要用[ ] 括起来,";"代表一行结束,以下创建方式也是合法的,矩阵的元素可以是实数,也可以是复数,复数用a+bi表 ...

  10. sqlserver数据库批量新增修改类

    MSSql Server 数据库批量操作 需要引用的命名空间 using System; using System.Collections.Generic; using System.Data; us ...

随机推荐

  1. Luogu P1613 跑路 题解 [ 蓝 ] [ 倍增 ] [ Floyd 最短路 ] [ 状压 dp ]

    跑路:绝佳倍增好题,思路是化 \(2^k\) 为 \(1\) ,倍增起预处理作用. 最近不知道是撞了什么运,前一脚看的是绿题,写完之后交一发,发现直接被 lxl 升蓝了,血赚. 思路:Floyd 首先 ...

  2. mybatis之增删改查

    核心配置文件中配置数据库连接及注册mapper.xml mapper.xml用来编写执行的sql(namespace为对应的接口类,标签id为接口类中的方法名) User为实体对象类 UserDao为 ...

  3. vue element-ui resetForm()表单重置的问题

  4. Deepseek学习随笔(9)--- 清华大学发布Deepseek赋能职场(附网盘链接)

    作为一名职场人,在工作中常常面临效率瓶颈:如何快速生成高质量内容?如何高效处理复杂任务?这些问题在接触了<清华大学-DeepSeek赋能职场>这份文档后,得到了全新的解答.这份由清华大学新 ...

  5. HTTP - [01] 简介

    HTTP本身是不安全的,因为传输的数据未经加密,可能会被窃听或篡改.为了解决这个问题,引入了HTTPS,即在HTTP上加入SSL/TLS协议,为数据传输提供了加密和身份验证. 一.概述   HTTP( ...

  6. 朝花夕拾,帮三年前的自己改bug

    三年前,滨海之边马上毕业的老少年 经过几天半死不活的思考之后决定干前端 那个时候为了面试各种css属性js API背的是滚瓜烂熟 然后投简历,企业要项目经验, 我没有工作我哪来的项目经验啊 没人会管你 ...

  7. 介绍一个不知道怎么形容的小东西--Proxy

    what's this? The Proxy object is used to define custom behavior for fundamental operations (e.g. pro ...

  8. 使用 HBuilderX 轻松解决 CSS 代码在一行的问题

    前言 最近在做博客园的界面美化,用的是园内大佬的开源项目,配置超级简单,只需要复制粘贴代码就好啦. 但在粘贴 CSS 代码时遇到一个问题,那就是所有代码都挤在了一行,没有一点排板的样子(如下图),对我 ...

  9. Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge

    前言 在拉取远程代码时,出现 Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge ...

  10. 一文彻底搞清楚ArkUI

    程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java相关开发.鸿蒙开发.人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前! 0.前言 在移动开发领 ...