matlab--vs--python-02 矩阵操作

生成和复制矩阵

# matlab    【注】matlab每行代码后面加入分号 ; 表示不在终端显示结果
A=diag([3 4 5])
B = repmat(A, 3) 
C = repmat(A, 2) 
>> A=diag([3 4 5])    # 创建一个3 4 5 的对角矩阵
A =
     3     0     0
     0     4     0
     0     0     5

>> B = repmat(A, 3)    # 重复构建3*3 个A矩阵 ,repmat(A, 1) 即为原来的 A
B =
     3     0     0     3     0     0     3     0     0
     0     4     0     0     4     0     0     4     0
     0     0     5     0     0     5     0     0     5
     3     0     0     3     0     0     3     0     0
     0     4     0     0     4     0     0     4     0
     0     0     5     0     0     5     0     0     5
     3     0     0     3     0     0     3     0     0
     0     4     0     0     4     0     0     4     0
     0     0     5     0     0     5     0     0     5

>> C = repmat(A, 2)
C =
     3     0     0     3     0     0
     0     4     0     0     4     0
     0     0     5     0     0     5
     3     0     0     3     0     0
     0     4     0     0     4     0
     0     0     5     0     0     5
# python
import numpy as np
A=np.diag([3, 4, 5]) 
print(A)
print(A.shape)
B=np.tile(A,(3,3))
print(B)
print(B.shape)
C=np.tile(A,(2,2))
print(C)
print(f'C.shape is {C.shape}')
#------------results-----
'''
[[3 0 0]
 [0 4 0]
 [0 0 5]]
(3, 3)
[[3 0 0 3 0 0 3 0 0]
 [0 4 0 0 4 0 0 4 0]
 [0 0 5 0 0 5 0 0 5]
 [3 0 0 3 0 0 3 0 0]
 [0 4 0 0 4 0 0 4 0]
 [0 0 5 0 0 5 0 0 5]
 [3 0 0 3 0 0 3 0 0]
 [0 4 0 0 4 0 0 4 0]
 [0 0 5 0 0 5 0 0 5]]
(9, 9)
[[3 0 0 3 0 0]
 [0 4 0 0 4 0]
 [0 0 5 0 0 5]
 [3 0 0 3 0 0]
 [0 4 0 0 4 0]
 [0 0 5 0 0 5]]
C.shape is (6, 6)

改变矩阵中的数值


# matlab    【注】matlab中内置函数,不需要导入操作,直接使用,使用tab键 能够回补命令
M = randi(10,3,4)   # 随机生成一个3*4 的矩阵,每个值 <10 
M(M(:,3)==2) = 10   # M(:,3)==2 为M中所有行,第三列 等于2 的数x1 x2,其返回x1 x2的下标n1 n2作为M的第n1 n2位置设置为10,【注:matlab读取顺序为先列后行】
# eg:
M =
     3     2     2     3     4
     2     4     3     3     2
     4     4     3     1     3
     9     1     4     1     1
     2     2     2     2     4
     
>> M(M(:,2)==4) = 10

M =
     3     2     2     3     4
    10     4     3     3     2
    10     4     3     1     3
     9     1     4     1     1
     2     2     2     2     4
# python
import numpy as np
M=np.random.randint(1,10,25) # 随机生成25个小于10的数: [9 6 1 3 9 4 9 7 1 9 3 1 5 9 7 3 7 6 4 9 1 8 5 8 9]
print(type(M))               # type is <class 'numpy.ndarray'>
M=np.reshape(M,(5,5))        # 转换为 (5, 5)的矩阵,类型还是为 'numpy.ndarray
R=np.where(M==2)             # M 中元素等于2作为条件,返回元素所在坐标
M[R] = 10                     # 对M中下标R的矩阵位置,进行赋值为10
# 【注】np.where(M==2, N1, N2) 三个元素作为参数时,M==2作为条件,条件成立返回N1,不成立返回N2
# eg:
[[9 5 4 7 4]
 [7 4 5 4 3]
 [6 7 2 7 8]
 [1 3 6 6 9]
 [2 2 4 9 8]]
<class 'numpy.ndarray'>  # shape is (5, 5)

(array([2, 4, 4], dtype=int64), array([2, 0, 1], dtype=int64))
--------------------
[[ 9  5  4  7  4]
 [ 7  4  5  4  3]
 [ 6  7 10  7  8]
 [ 1  3  6  6  9]
 [10 10  4  9  8]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值