当考虑了方向,即axis=1为横向,axis=0为纵向,而不是行和列,那么所有的例子就都统一了。
1.numpy 的安装
我们在安装了python后,使用如下命令,来安装numpy模块
pip install numpy
2.numpy中数据的基本属性
numpy的数据格式有以下三个属性:
- ndim:维度
- shape:行数和列数
- size:元素个数
array1=np.array([1,2,3,4]) # 1维数组
array2=np.array([[1,2,3,4]]) # 2维数组
print(array1.shape)
print(array2.shape)
print(array1.ndim)
print(array2.ndim)
# 输出
(4,)
(1, 4)
1
2
从上述代码我们可以看出,np.array()函数里有一个中括号时,表示的是一维数组;np.array()函数里有两个中括号时,表示的是一个二维数组;
3.在numpy中创建数组array np.array()
#list列表转化为矩阵注意有两个中括号[],指定数据类型
array = np.array([[1,2,3],[2,3,4]],dtype=int)
print('number of dim:',array.ndim) # 维度
# number of dim: 2
print('shape :',array.shape) # 行数和列数
# shape : (2, 3)
print('size:',array.size) # 元素个数
# size: 6
a=np.arange(1,20,2) #1-19的数据,2步长,这时的a的维度是1
a=np.arange(12).reshape((3,4)) #三行四列 ,0-11数据注意有两个中括号[]
4.numpy中的矩阵运算
(1) 矩阵的基本运算
例如A和B为两个相同行数和列数大小的矩阵,
C=A+B
C=A-B
C=A*B
Numpy中的矩阵乘法分为两种,
其一是矩阵中对应元素相乘,
其二是标准的矩阵乘法运算,即对应行乘对应列得到相应元素:
C=A*B
C_dot=np.dot(A,B) #点乘
C=A.dot(B)
a=np.random.random((2,4))
np.sum(a) # 4.4043622002745959
np.min(a) # 0.23651223533671784
np.max(a) # 0.90438450240606416
- 注意:
当axis=1,以横向 行作为查找单元;
当axis=0,以纵向 列为查找单元 np.sum(a,axis=0)
(2) array的分割np.split()和合并np.concatenate()
只有当矩阵的行数和列数相等的时候,才可以进行矩阵的拼接
A=np.array([[1,2,3]]) # shape=(1,3)
B=np.array([[4,5]]) # shape=(1,2)
C=np.concatenate([A,B],axis=1)
print(C)
print(C.shape)
# 输出:
[[1 2 3 4 5]]
(1, 5)
当axis=1,以横向 行作为查找单元;np.concatenate([A,B],axis=1)
当axis=0,以纵向 列为查找单元
A=np.arange(1,13).reshape((3,4))
print(A)
print(np.split(A, 2, axis=1)) #纵向分割
print(np.split(A, 3, axis=0)) #横向分割
print
print(np.vsplit(A,3))
print(np.hsplit(A,2))
(3)求矩阵中最小元素和最大元素的索引:argmin() 和 argmax()
print(np.mean(a))
print(a.mean(axis=1)) #计算行的平均值
print(a.median())
print(np.cumsum(A)) #累加元素
print(np.diff(A)) #累差元素
print(np.transpose(A))
print(A.T)
clip(Array,Array_min,Array_max)
clip(Array,Array_min,Array_max)顾名思义,Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素,并将这些指定的元素转换为最小值或者最大值。
4.矩阵索引
一维索引跟list相同
二维索引 A[1,1:3] 第二行中第2到4列元素切片
5.矩阵的打印输出
#按行打印
for row in A:
print(column)
#按列打印
for column in A.T:
print(column)
A.flatten() #将A展开成一行的
for item in a.flat: #逐个元素打印
print(item)
6.numpy的深拷贝deep copy与浅拷贝
b=a.copy() # b的值不随a改变,深拷贝
b=a # b的值随a改变,浅拷贝
print(C is A)
print(D is A)
7. 峰值检测函数:
方法一:判断当前位置的前后数据是否符合波峰和波谷
peaksOfAcclerate=[]
troughsOfAcclerate=[]
for idx in range(1,lengthOfFile-1): #可接受1维和2维的输入数据
if acclerateOfSensor[idx-1] < acclerateOfSensor[idx] and acclerateOfSensor[idx] >acclerateOfSensor[idx+1]:
peaksOfAcclerate.append((idx,acclerateOfSensor[idx]))
if acclerateOfSensor[idx-1] > acclerateOfSensor[idx] and acclerateOfSensor[idx] <acclerateOfSensor[idx+1]:
troughsOfAcclerate.append((idx,acclerateOfSensor[idx]))
方法二:
#np.where 方法适合输入数据为一维数组 shape=(n,)
peak_location=np.where(np.diff(np.sign(np.diff(acclerateOfSensor)))==-2)[0]+1
trough_location=np.where(np.diff(np.sign(np.diff(acclerateOfSensor)))==2)[0]+1
print(len(peak_location))
print(len(trough_location))
numpy.diff(a, n=1,axis=-1) 函数: 沿着指定轴计算第N维的离散差值
参数:
- a:输入矩阵
- n:可选,代表要执行几次差值
- axis:默认是最后一个
numpy.sign()函数: 取某个数的符号。
numpy.where(X==1)函数: 查找矩阵中特定元素的下标索引
返回值 C=numpy.where(X==1)的类型为tuple