一、数组的创建、删除等相关操作
import numpy as numpy
#创建Numpy一维数组
arr1 = np.array([1,2,3,4])
print('一维数组:',arr1)
#创建二维数组
arry2 = np.array([[1,2,3],[4,5,6]])
print('二维数组:',arr2)
#设置最小维度3
arr3 = np.array([1,2,3,4],ndmin=3)
print('三维数组:',arr3)
#创建二维数组
arr1 = np.array([[1,2,3],[4,5,6]])
print('数组维度:',arr1,ndim)
print('数组形状:',arr1.shape)
print('数组的元素总数:',arr1.size)
print('数组元素的数据类型:',arr1.dtype)
#创建一维数据
arr = np.array([1,2,6,8,9,10,12])
a = arr[4] #获取第五个元素
print(a)
#一维数组切片
b1 = arr[1:6:2] #b1数组[2 8 10]
b2 = arr[:5] #b2数组[1 2 6 8 9]
b3 = arr[2:] #b3数组[6 8 9 10 12]
print(b1,b2,b3)
#修改数组中元素
arr[1:3] =20,30
print(arr)
#创建二维数据
arr = np.array([[0,1,2,3,4],[5,6,7,8,9]])
a =arr[1,3]
print(a)
#二维数组切片
b1 = arr[:2,1:3]
b2 = arr[1:,2:5]
b3 = arr[:2:2,:3:2]
b4 = arr[...,1:3]
b4 = arr[...,1:3]
print(b1,b2,b3,b4)
#修改数组中元素
arr[:2:2,:3:2] = 44,55
print(arr)
#数组的索引
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = a[a>3]
print(a>3)
print(b)
#创建3行4列数组
arr = np.array([[0,1,2,4],[5,6,7,8],[9,10,11,12]])
#显示数组形状
print(arr.shape)
#用shape属性改变数组形状为4行3列
arr.shape = (4,3) #将arr数组形状修改围行3列
print(arr,arr.shape)
#用reshape函数生成形状为2行6列数组arr_b
arr_b = arr.reshape((2,6)) #生形状为2行6列数组arr_b,arr数组没变化
print(arr,arr_b)
#用resize函数改变数组arr形状为2行6列
arr_c = arr.resize((2,6)) #arr改变形状为2行6列数组,arr_c为None
print(arr,arr_c)
#数组的展平
#数组的展平,创建3行4列数组
arr = np.array([[0,1,2,4],[5,6,7,8],[9,10,11,12]])
#展平arr数组,但arr数组不改变
arr_b = arr.ravel()
print(arr,arr_b)
#数组转置和轴对换
#创建数组2行5
arr = np.arange(10).reshape(2,5)
print(arr)
print('转置数组:')
print(arr.T)
#用rollaxis函数
arr = np.arange(8).reshape(2,2,2)
print('原数组:',arr)
# 将轴 2 滚动到轴 0(宽度到深度)
print('调用 rollaxis 函数:')
print(np.rollaxis(arr,2))
#数组连接
#创建数组arr1
arr1 = np.array([[1,2,3], [4,5,6]])
print('第1个数组arr1:',arr1)
#创建数组arr2
arr2 = np.array([['a',8,9], ['b',11,12]])
print('第2个数组arr2:',arr2)
# 注意两个数组的维度相同
#concatenate函数
print('沿轴0连接两个数组:')
print(np.concatenate((arr1, arr2),axis=0))
print('沿轴 1 连接两个数组:')
print(np.concatenate((arr1, arr2),axis=1))
#stack函数
print('沿轴 0 堆叠两个数组:')
print(np.stack((arr1, arr2),0))
print('沿轴 1 堆叠两个数组:')
print(np.stack((arr1, arr2),1))
#数组切割
#创建数组arr1
arr1 = np.array([[1,2,3],
[4,5,6]])
print('第1个数组arr1:',arr1)
#创建数组arr2
arr2 = np.arange(1,18,2)
print('第2个数组arr2:',arr2)
#使用split函数
print('将arr1数组竖直分割为2个大小相等的子数组:')
print (np.split(arr1,2))
print('将arr1数组水平分割为3个大小相等的子数组:')
print (np.split(arr1,3,1))
print('将arr2数组在一维数组中表明的位置分割:')
print (np.split(arr2, [2, 4 , 8]))
#数组的添加和删除
#创建数组arr append
arr = np.array([[1,2,3,4], [5,6,7,8]])
print('第1个数组arr:',arr)
print('原数组:',arr)
print('沿轴 0 添加元素:')
print(np.append(arr,[[9,10,11,12],[11,11,11,11]], axis=0))
print('沿轴 1 添加元素:')
print(np.append(arr,[[9,10],[11,12]], axis=1))
#创建数组arr
arr = np.array([[11,12,13,14], [15,16,17,18]])
print('第1个数组arr:',arr)
print('未传递axis参数。在插入之前输入数组会被展开。')
print(np.insert(arr,4,[9, 10,11,12]))
print('传递了axis参数,会广播值数组来配输入数组。')
print('沿轴 0 广播:')
print(np.insert(arr, 2, [9], axis=0))
'''
[[11 12 13 14]
[15 16 17 18]
[9 9 9 9]
]
'''
print('沿轴 1 广播:')
print(np.insert(arr, 2, [9], axis=1))
print('沿轴 0 插入:')
print(np.insert(arr, 2, [9,10,11,12], axis=0))
print('沿轴 1 广播:')
print(np.insert(arr, 2, [[9],[10]], axis=1))
print('沿轴 1 插入:')
print(np.insert(arr, 2, [[9,10],[11,12]], axis=1))
#删除数组元素
#np.delete(arr,obj,axis)
'''
arr = np.arange(1,17).reshape(4,4)
print('第1个数组arr:',arr)
print('未传递 axis 参数。在删除之前输入数组会被展开。')
print(np.delete(arr,[6,9,12]))
print(arr)
print('删除第3列:')
print(np.delete(arr, 2, axis=1))
print(arr)
print('删除第2行:')
print(np.delete(arr, 1, axis=0))
print(arr)
print('从数组中删除用切片表示元素范围值:')
print(np.delete(arr, np.s_[2::2]))
二、数组的矢量计算
# 数组的矢量计算
# 一维数组的矢量计算
arr_a = np.arange(4)
arr_b =np.array([0,1,1,0])
arr_c = arr_a * arr_b
print(arr_c,arr_a,arr_b)
print(-arr_b)
print(arr_a**2)
#不同形状的二维数组的运算(广播机制)
arr_1 = np.arange(6).reshape(2,3)
arr_2 = np.arange(3)
print(arr_1)
print(arr_2)
arr_3 = arr_1 + arr_2
print(arr_3)
#数组的通用函数
arr_1 = np.arange(1,7)
print(arr_1)
a = np.sqrt(arr_1)
print(a)
print(np.add(arr_1,2))
#矩阵的创建和基本操作
#如何 创建矩阵
str = '1 2 3;4 5 6'
a = np.mat(str)
print(a)
arr_1 = np.arange(6).reshape(2,3)
b =np.mat(arr_1)
print(b)
print(a+b)
# 不同行数(非1行)的矩阵是不能想加的
#随机函数
b = np.random.rand(2,3)
print(b)
a = np.random.randint(20,size=(2,4))
print(a)
#实例如下
#2
a = [6,2,5,0,1,3,4,7,8,9]
arr = np.array(a).reshape(2,5)
print(arr)
print(np.split(arr,2))
'''
#4
a = [6,2,5,0,1,3,4,7,8,9,10,11]
arr = np.array(a).reshape(3,4)
print(arr)
print(arr[:2,:2])
print(arr[2])
print(arr[1:,2:])
三、统计函数
import numpy as np
import pandas as pd
aa =d'.\JDdata.xls'
df = pd.DataFrame(pd.read_excel(aa))
#print(df)
df1 =df[["金额"]]
#print(df1)
arr = df1.values
print(arr)
'''
#m = np.max(arr,axis=0)
m = np.nanmax(arr,axis=0)
#n = np.nanmin(arr,0)
n = np.nanmin(arr)
print("金额的最大值是",m)
print("金额的最小值是",n)
print("总金额是",np.nansum(arr,0))
arr1 = np.random.randint(10,size=(3,4))
print(arr1)
# print("arr1最大值是",np.nanmax(arr1))
# print("arr1竖直方向最大值是",np.nanmax(arr1,0))
# print("arr1水平方向最大值是",np.nanmax(arr1,1))
# print("某一列的范围",np.ptp(arr1,0))
# print("某一行的范围",np.ptp(arr1,1))
#求和和加权平均值
#print(np.sum(arr1,1)) (6+7+24)/6 37/6 (18+9+3)/6
#print(np.average(arr1,1,[2,1,3,1]))
#算数平均值
print(np.mean(arr1,axis=0))
#标准差和方差 和 平均值
#方差
print(np.var(arr1,axis=0))
#标准差
print(np.std(arr1,axis=0))
arr1 = np.random.randint(10,size=(3,4))
#数组的排序
print(arr1)
arr2 =np.sort(arr1,1);
print(arr2)
dt=np.dtype([('name',np.str,10),('age',np.int)])
arr3=np.array([("张三",19),("李四",23),("王五",29),("赵柳",24)],dtype=dt)
print(arr3)
print(np.sort(arr3,order="age"))
'''
#数组的去重复
arr1 = np.random.randint(10,size=(3,4))
print(arr1)
arr2 =np.unique(arr1)
print(arr2)
a =np.tile(arr1,3)
print(a)
b= np.repeat(arr1,2,axis=0)
print(b)