‘矩阵’的计算
1列表的计算,相加为列表元素直接相加,数组则有所不同
list1 = [[1,2,3,4],[1,2,3,4]]
list2 = [[2,3,4,5],[2,3,4,5]]
print(list1+list2)
结果:
[[1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5], [2, 3, 4, 5]]
注意:对位运算,注意shape
一维数组与一维数组:保证元素的个数必须相同
多维数组与多维数组:注意形状,相同的维度大小和维度个数
import numpy as np
s1 = np.array(list1)
s2 = np.array(list2)
s1 = s1*10
print('s1',s1)
print('*'*100)
print('s2',s2)
print('*'*100)
print(s1+s2)
print('*'*100)
print(s1*s2)
运算结果:
s1 [[10 20 30 40]
[10 20 30 40]]
****************************************************************************************************
s2 [[2 3 4 5]
[2 3 4 5]]
****************************************************************************************************
[[12 23 34 45]
[12 23 34 45]]
****************************************************************************************************
[[ 20 60 120 200]
[ 20 60 120 200]]
2一维数组和多维数组的问题:
s3 = np.array([1,2,3])
print(s3)
print(s6.shape)
[1 2 3]
(1, 3)
s4 = np.array(range(1,13))
s5 = s4.reshape(4,3)
print(s5)
print(s5.shape)
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
(4, 3)
其中s3*s5的结果为:
[[ 1 4 9]
[ 4 10 18]
[ 7 16 27]
[10 22 36]]
3维度转置的问题
转置之后,维度个数不变,但是大小改变
s7=np.arange(12).reshape((4,3))
print(s7)
print(s7.T)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[ 0 3 6 9]
[ 1 4 7 10]
[ 2 5 8 11]]
4、一维数组的切片与索引
s1=np.array([1,2,3,4,5,6])
(1)索引类似列表,下标从0 开始
s1[0] s1[1] s1[2] s1[4]
结果: 1 2 3 5
(2)全部截取
s1[:]
结果:[1 2 3 4 5 6]
s1[1:]
结果:[2 3 4 5 6]
s1[::2] 步长为2
结果:[1 3 5]
5、多维数组的切片
(1)取单值:
s2=np.array(range(0,16)).reshape((4,4))
s2[1][2]
s2[1,2]
两者均为 索引为1的行 和索引为2的列的值
(2)取多个值(取数组的问题)
取连续的多行多列
原来的数组s2:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
s2[:][1:3]
结果取值为:第二行第三行的全部值
[[ 4 5 6 7]
[ 8 9 10 11]]
截取不连续的多行多列
1:print(s2[::2,2:]):
[[ 2 3]
[10 11]]
2:
print(s2)
print(s2[[0,2]][:,2:4])
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 2 3]
[10 11]]