ndaray 随机创建
# 导入numpy, 设置别名为np
import numpy as np
# 导入matplotlib.pyplot as plt
import matplotlib.pyplot as plt
# random表示常见随机数,rand表示创建一个随机的浮点数数组,参数的个数表示数组维度的大小
# 默认区间是 0.0 - 1.0 之间
arr = np.radom.rand(3,4)
print(type(arr))
# ndim 参数表示数组的维度
print(arr.ndim)
# shape参数表示数据的大小
print(arr.shape)
# dtype表示每个数据的类型
print(arr.dtype)
# 生产一个符合标准正态分布的数组
arr = np.random.randn(10000)
plt.hist(arr,bin=100,color='red',alpha=0.5)
plt.show()
<img src="/Users/mac/Library/Application Support/typora-user-images/image-20200420102516028.png" width = 30% height = 30% />
# 创建一个3行4列的二维整数数组,每个元素的值区间在 -10~20之间
arr = np.random.randint(-10,20,size=(3,4))
print(arr)
# 创建一个3行4列的二维浮点数数组,每个元素的值区间在 -10~20之间
arr = np.random.uniform(-10,20,size=(3,4))
print(arr)
ndarray的序列创建
lis = range(10)
# 创建一维数组
arr = np.array(lis)
print(arr)
# array() 参数可以是多维的数组
# 表示创建了一个三维数组,数组里包含了两个二维数组
arr2 = np.array([[lis,lis],[lis,lis]])
print(arr2)
# 创建一个3行4列的二维全零数组,第二个参数可以指定数据类型
arr3 = np.zeros((3,4), int)
print(arr3)
print(arr3.dtype)
# 创建一个3行4列的二维全1数组,第二个参数可以指定数据类型
arr4 = np.ones((3,4), int)
print(arr4)
# 初始化数组,不指定具体数值,起占位符作用
arr5 = np.empty((3,4), int)
print(arr5)
ndarray 的arange 和 reshape
# 等同于先创建一个列表,再使用array方法来创建数组
arr = np.arrange(10)
print(arr)
# reshape 调整数组维度,但元素个数的总数不变
arr2 = arr.reshape(2,5)
print(arr2)
# 将是个元素的一维数组改变成一个三维数组
arr3 = arr.reshape(1,2,5)
print(arr3)
# 随机打乱原数组的序列
np.random.shuffle(arr)
print(arr)
print(arr.reshape(2,5))
数组的数据类型转换
zeros_float = np.zeros((3,4))
print(zeros_float)
# 更改数据类型
zeros_int = zeros_float.astype(np.int32)
print(zeros_int)
ndarray的矩阵运算
arr = np.arange(10)
# 矩阵之间的运算,是按矩阵级的运算,每一个元素和对应索引的运算进行运算
print(arr * arr)
print(arr + arr)
# 广播运算,将标量广播到数组的各个元素上
print(1. + arr)
print(2 * arr)
ndarray的切片,索引操作
#1.一维数组的索引和切片操作
arr1 = np.arange(10)
print(arr1)
print(arr1[5:9])
#2.多维数组的索引和切片操作
arr2 = np.arange(10).reshape(2,5)
print(arr2)
# 二维数组的索引和切片操作,[] 里第一个数字表示行所在的索引,第二个数字表示列所在的索引
print(arr2[1,:3])
print(arr2[:,:3])
ndarray的条件索引
#1
year_arr = np.array([[2010, 2011, 2012],[2001, 2002, 2003],[ 2015, 2016, 2017]])
print(year_arr)
# 将数组的每个元素和条件进行匹配,返回匹配结果,为bool值
after_2005_year = year_arr > 2005
print(after_2005_year)
arr2 = np.random.randn(3,3)
# 将bool数组映射到arr2,返回匹配为True的数组,返回的一维数组
# 筛选数据
new_arr2 = arr2[after_2005_year]
new_arr2 = arr2[(year_arr > 2005) & (year_arr < 2015)]
print(new_arr2)
ndarray的维数转换 transpose()
# transponse() 转换原数组维度-shape-行列互换,如果是二维数组不需要指定参数
arr2 = np.random.rand(3,4)
print(arr)
print('-----')
print(arr2.transpose())
# 多维数组(元组的每个元素都是原数组维度数所在的索引的值(原索引从0开始)
arr3 = np.random.rand(2, 3, 4)
print(arr3.shape)
print("-"*20)
arr4 = arr3.transpose((2, 0, 1))
print(arr4.shape)
arr = np.random.randn(3,4)
# 取最接近的比自己大的整数
print(np.ceil(arr))
print('*'*10)
# 向下取整,及取比自己小的整数
print(np.floor(arr))
# 先去掉符号取绝对值,再讲符号添加上
print(np.round(arr))
# 四舍五入
print(np.rint(arr))
# 取绝对值
print(np.abs(arr))
# nan = not a number 表示不是一个可以用来计算的数值
# 非数值类型
num = np.nan
# 判断是否为nan类型
print(np.isnan(arr))
print(np.isnan(num))
# 数组和数组之间每个元素相乘
result1 = np.multiply(arr,arr)
result2 = np.multiply(arr[2, 3], arr[0, 1])
# 除法
div1 = np.divide(arr,arr)
div2 = np.divide(arr[2,3],arr[0,2])
# 三目运算符,三元运算符
# 包含三个参数,第一个参数是条件语句,第二个参数是条件为真的返回值,第三个参数是条件为假时候的返回值
# 返回值用来替换原数组的元素
print(np.where(arr<0,-1,0))
ndarray的统计函数
arr = np.random.randint(0,10,(3,4))
print(arr)
# 求数组里所有元素的平均值
np.mean(arr)
# 求数组里最大值
np.max(arr)
# 求数组里最小值
np.min(arr)
# 衡量数据和期望值之间的偏离值
# 标准差
np.std(arr)
# 方差:所有元素与平均数的平方和的平均数
np.var(arr)
# 求每列或者行的最值索引
np.argmax(arr) #将多维变一维后,查看最大值的索引(按照行拆解)
np.argmax(arr,axis=0) #结果保留列数不变,即行与行比较
np.argmax(arr,axis=1) #结果保留行数不变,即列之间比较,返回一行中的最大值
np.argmin() #参数如上,最小值
# 累加or累乘
np.cumsum(arr)
np.cumprod(arr)
元素的判断函数
arr = np.random.rand(3,4)
# 存在一个元素满足条件为 True
np.any(arr>0.5)
# 所有元素满足条件为 True
np.all(arr>0.5)
加载数据
-
loadtxt
filename = '' data_arr = np.loadtxt(filename, # 需要打开的csv文件的文件名 delimiter = ",", # csv文件的分隔符 dtype=str, # 数据是按编码后的字符串格式存储 usecols=(0,2) # 表示读取文件里的列的索引位置 )
-
genfromtxt
filename = '' data_arr = np.genfromtxt(filename, # 需要打开的csv文件的文件名 delimiter = ",", # csv文件的分隔符 dtype=str, # 按字符串存储数据,不在转换为字节码 usecols=(0,2) # 表示读取文件里的列的索引位置 )
网友评论