二维矩阵

以二维矩阵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. 中国最难入职的IT公司排行榜

    在IT行业竞争日益白热化的今天,头部企业的招聘门槛不断刷新求职者的认知.根据最新行业调研和招聘数据,我们整理出2025年中国最难入职的几家互联网公司,并揭秘其背后严苛的选拔逻辑. 通常衡量难不难,会从 ...

  2. 【COM3D2Mod 制作教程(7)】实战!制作衣服部分(上)

    [COM3D2Mod 制作教程(7)]实战!制作衣服部分(上) 教程介绍 隔了 N 个月终于迎来了第二期的 Mod 教程部分,这一期我们将开始制作人物的衣服部分. 因为体型适配的原因,衣服部分要比身体 ...

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

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

  4. SpringBoot - [07] Web入门

    题记部分 一.Web 入门   SpringBoot将传统Web开发的mvc.json.tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置.创建Sp ...

  5. Cython与CUDA之Gather

    技术背景 Cython是Python的一个超集,可以使用Pythonic的语法写出接近于C语言的性能,可以用于将Python编程过程中遇到的Bottleneck模块改写成Cython以达到加速的效果. ...

  6. Stream4Graph:动态图上的增量计算

    作者:张奇 众所周知,当我们需要对数据做关联性分析的时候,一般会采用表连接(SQL join)的方式完成.但是SQL join时的笛卡尔积计算需要维护大量的中间结果,从而对整体的数据分析性能带来巨大影 ...

  7. windows c++共享内存

    #include <iostream> #include <Windows.h> #include <string> int main() { const wcha ...

  8. 【P1】Verilog部件级实验/有限状态机

    课上 再次体验大心脏 T1 奇偶校验 for循环数1的个数判断奇偶/异或缩减运算符判断奇偶,然后根据check的奇偶要求调整最高位 bug1 !注意优先级:位运算 低于 比较运算. cnt & ...

  9. Ollama——大语言模型本地部署的极速利器

    1.概述 Ollama 是一款开源跨平台大模型工具,主要用于在本地便捷部署和运行大型语言模型(LLM),核心目标是降低用户使用大模型的门槛,同时保障数据隐私.核心功能与特点如下: (1)本地部署,隐私 ...

  10. golng切片实现分页

    前言 实现切片分页,主要是根据选择页码和每页显示数量,计算了切片的开始.结束索引地址 package main import "math" func main() { slice1 ...