numpy常用小知识
- 1.array基本信息查看及操作
- 查看array元素内容、类型、维度
- 常见的array格式:零矩阵、一矩阵、空矩阵
- 2.array之间的计算
- 加减法
- 乘除法
- 随机数,按行或列求最大最小值
- sort、转置
- 3. 索引和拼接
- 取值,取行或列,降维
- 数组拼接
1.array基本信息查看及操作
写在前面:命名py文件时,不要使用python自带的包命名,会出现AttributeError:module ‘numpy’ has no attribute ‘array’。
查看array元素内容、类型、维度
import numpy as np
array = np.array([[1, 2, 3],
[2, 3, 4]])
print(array) # 查看array
print(array.dtype) # 每个元素的类型
print("number of dim", array.ndim) # array的维度,两行三列
print('shape:',array.shape) # 形状
print('size:',array.size) # array的大小=array中所有元素的格式
常见的array格式:零矩阵、一矩阵、空矩阵
# 常见的array格式
a1 = np.zeros((2, 3), dtype=np.int) # 生成全为0的array
a2 = np.ones((2, 3), dtype=np.int16) # 生成全为1的array
a3 = np.empty((2, 3)) # 生成全为接近空的array
a4 = np.arange(10, 20, 2) # 生成array 10到20 步长为2,即10,12,14,16,18
a5 = np.arange(12) # 生成0到11
a6 = np.arange(12).reshape((3,4)) # reshape重新定域矩阵形状
a7 = np.linspace(1, 10, 4).reshape((2, 2)) # 将1到10之间,步长为4-1=3,即1,4,7,10,重新定义为2*2矩阵
2.array之间的计算
加减法
# array之间的计算
a = np.array([10, 20, 30, 40]) # 相同维度
b = np.arange(4)
c1 = a+b
c2 = a-b
aa = np.array([[1, 2, 3, 4], # 不同维度,把维度低的array自动扩大到大维度的array
[11, 22, 33, 44]])
bb = np.arange(4)
cc = aa+bb # 结果为 [[1 3 5 7] [11 23 35 47]]
乘除法
d = np.array([[1, 2],
[3, 4]])
e = np.arange(1, 8, 2).reshape((2, 2)) # [[1 3] [5 7]]
print("d*e:", d*e) # 对应元素相乘
print("d/e:", d/e) # 对应元素相除
print("d e 矩阵相乘:", d.dot(e)) # 矩阵相乘 等价于np.dot(d,e)
随机数,按行或列求最大最小值
f = np.random.random((2,4)) # 随机产生shape为(2,4)的一个array,每个元素都在0-1之间
print(np.sum(f)) #求和
print(np.min(f))
print(np.max(f))
print(np.sum(f, axis=0)) # 按列执行,从上往下走
print(np.min(f, axis=1)) # 按行执行,从左往右走
print(np.max(f, axis=0))
此处axis=0,axis=1用图解释如下:
sort、转置
c = np.arange(14, 2, -1).reshape((3,4))
print("sort:", np.sort(c)) # 每一行进行从小到大的排序
print("c的转置:", np.transpose(c)) # 对矩阵进行转置,等价于c.T,行向量用np.newaxis进行转换
print("clip:", np.clip(c, 5, 9)) # c矩阵中小于5的元素等于5,大于9的等于9
3. 索引和拼接
取值,取行或列,降维
a = np.arange(3, 15).reshape((3,4))
print(a)
print(a[1]) # 索引为1的行,等价于a[:][1]
print(a[2, 1]) # 与数组类似
print(a[:, 1]) # 索引为1的列,生成行向量
print(a[:,1:2]) # 索引为1的列,生成列向量
print(a[:, 1:3]) # 索引为1到2 的列,生成列向量
print(a.flatten()) # 所有元素变为一维
数组拼接
a = np.array([1, 1, 2])
b = np.array([2, 3, 4])
c = np.vstack((a,b)) # vertical 垂直方向b接在a后面
d = np.hstack((a,b)) # horizontal 水平方向b接在a后面
a = np.array([1, 1, 2])[:, np.newaxis]
b = np.array([2, 3, 4])[:, np.newaxis]
e = np.concatenate((a, b, b), axis=0) # 多向量融合
f = np.concatenate((a, b, b), axis=1)