一、地址与指向
import numpy as np
a = np.arange(12)
b = a
# a和b的地址值相同
c = a.view()
# a和c的地址值不同,但是指向相同
d = a.copy()
# a和d的地址值不同,指向也不同
二、赋值操作
data = np.sin(np.arange(20)).reshape(5,4)
代码结果为
[[ 0. 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 0.6569866 ]
[ 0.98935825 0.41211849 -0.54402111 -0.99999021]
[-0.53657292 0.42016704 0.99060736 0.65028784]
[-0.28790332 -0.96139749 -0.75098725 0.14987721]]
ind = data.argmax(axis=0)
# axis=0 代表列
#argmax 每一(列)最大值的索引
代码结果为
[2 0 3 1]
data_max = data[ind, range(data.shape[1])]
#然后可通过这个操作,把每一列的最大值打印出来
代码结果为
[ 0.98935825 0.84147098 0.99060736 0.6569866 ]
A = np.arange(0,40,10)#0~40间,10为步长
print(A)
B = np.tile(A,(2,2)) # 扩展,行和列都变成原来的两倍
print(B)
代码结果为
[ 0 10 20 30]
[[ 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30]]
aa = np.array([[4,3,5],[1,2,1]])
print(aa)
bb = np.sort(aa,axis=1) #对aa的值,由大到小排序
# axis=1 按水平方向计算,axis = 0 按垂直方向计算
print(bb)
代码结果为
[[4 3 5]
[1 2 1]]
[[3 4 5]
[1 1 2]]
c = np.array([4,3,1,2])
d = np.argsort(c)
print(d) #确定值由大到小,所对应的的索引
print(c)
print(c[d])
代码结果为
[2 3 1 0]
[4 3 1 2]
[1 2 3 4]
三、矩阵
B = np.arange(3)
print(B)
print(np.exp(B)) #e的几次幂
print(np.sqrt(B)) #开根号
代码结果为
[0 1 2]
[ 1. 2.71828183 7.3890561 ]
[ 0. 1. 1.41421356]
A = np.floor(10*np.random.random((3,4)))
print(A)
# floor 是将 数进行一个向下的取整
代码结果为
[[ 7. 9. 3. 7.]
[ 7. 3. 4. 9.]
[ 9. 6. 6. 4.]]
print(A.ravel()) # 把矩阵拉成一个向量
A.shape = (6,2) # 把一个向量变成 6行2列的矩阵
# 也可以写成 a.reshape(3,-1) 对于一个向量转换成矩阵,行数确定了,列数也就确定了,写成-1即可自动转换
a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
print(np.hstack((a,b)))
# 把 a 和 b 左右拼接起来
print(np.vstack((a,b)))
# 把 a 和 b 上下拼接起来
aa = np.floor(10*np.random.random((2,12)))
print(aa)
print(np.hsplit(aa,3))
# 按左右 平均分成3份 ,每个为2*4的矩阵
print(np.hsplit(aa,(3,4)))
# 往里传元组,指定切割的位置在3 4 列后面 ,切两刀,也是变成3份
bb = np.floor(10*np.random.random((12,2)))
print(bb)
print(np.vsplit(bb,3))
# 按上下, 平均切成3份 ,每个为4*2矩阵
代码结果为
[[ 4. 9. 1. 4. 5. 3. 9. 2. 1. 0. 3. 2.]
[ 1. 3. 5. 2. 8. 4. 6. 4. 2. 6. 9. 4.]]
[array([[ 4., 9., 1., 4.],
[ 1., 3., 5., 2.]]), array([[ 5., 3., 9., 2.],
[ 8., 4., 6., 4.]]), array([[ 1., 0., 3., 2.],
[ 2., 6., 9., 4.]])]
[array([[ 4., 9., 1.],
[ 1., 3., 5.]]), array([[ 4.],
[ 2.]]), array([[ 5., 3., 9., 2., 1., 0., 3., 2.],
[ 8., 4., 6., 4., 2., 6., 9., 4.]])]
[[ 7. 2.]
[ 7. 1.]
[ 0. 7.]
[ 6. 3.]
[ 0. 5.]
[ 8. 3.]
[ 9. 4.]
[ 9. 5.]
[ 5. 8.]
[ 6. 0.]
[ 7. 7.]
[ 5. 8.]]
[array([[ 7., 2.],
[ 7., 1.],
[ 0., 7.],
[ 6., 3.]]), array([[ 0., 5.],
[ 8., 3.],
[ 9., 4.],
[ 9., 5.]]), array([[ 5., 8.],
[ 6., 0.],
[ 7., 7.],
[ 5., 8.]])]
print(np.arange(15))
a = np.arange(15).reshape(3,5) # 把行向量分成3行5列的矩阵
print(a)
print(a.shape) #a的行列是多少
print(a.ndim) # 矩阵的维数是多少
print(np.zeros((3,4))) # 定义一个矩阵,初始化值为0,传入的元组的形式
print(np.ones((3,4))) # 定义一个矩阵,初始化值为1,传入的元组的形式
print(np.arange(10,30,5)) #起始的值为10,终值为30,每次加5,这样一个数组结构
print(np.random.random((2,3))) #2行3列的随机值组成的矩阵, 0~1
print(np.linspace(0,2*pi,100)) # 从0到2*π,等间距的取100个值
矩阵的加减法
a = np.array([20,30,40,50])
b = np.arange(4)
c = a - b
print(c)
c = c - 1
print(c)
b = b**2
print(b)
print(a<35) #结果是一个true/false组成的矩阵
矩阵的乘法与点乘
print(A*B) #A,B对应位置相乘
print(A.dot(B)) # 矩阵乘法
print(np.dot(A,B)) #矩阵乘法
vector = numpy.array([5,10,15,20])
print(vector[0:3]) #取一行
print(vector == 10) #判断矩阵中那个值为10。返回boolean
matrix = numpy.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
print(matrix[:,1]) #代表取第二列
print(matrix[:,0:2]) #取两列
print(matrix[0:2]) # 取两行
print(matrix[1:3,0:2]) #取第1~2行,第0~1列
print(matrix == 25)
四、与或
vector = numpy.array([5,10,15,20])
equal_to_ten_and_five = (vector == 10) & (vector == 5)
print(equal_to_ten_and_five)
# & 与:当前array里一个数 既等于10又等于5
equal_to_ten_or_five = (vector == 10) | (vector == 5)
print(equal_to_ten_or_five)
# | 或:当前array里一个数 等于10或者等于5