生成和复制矩阵
# 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
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}')
'''
[[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
import numpy as np
M=np.random.randint(1,10,25)
print(type(M))
M=np.reshape(M,(5,5))
R=np.where(M==2)
M[R] = 10
[[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'>
(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]]