Numpy学习
Posted Cherry_Zj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy学习相关的知识,希望对你有一定的参考价值。
Numpy学习
numpy的初步了解
1.使用numpy生成数组,得到ndarray
的类型
t1 = np.array([1,2,3])
print(t1)
print(type(t1)) #<class 'numpy.ndarray'>
2. np.arange(x)
方法的效果和np.array(range(x))
的效果一样
t2 = np.array(range(10))
print(t2)
print(type(t2))
t3 = np.arange(10)
print(t3)
print(type(t3))
3.使用dtype
可以得到数据类型
t4 = np.arange(4,10,2)
print(t4)
print(type(t4))
print(t4.dtype)
4.numpy中的数据类型
t5 = np.array(range(1,4),dtype=float)
# 或t5 = np.array(range(1,4),dtype="float")
# 或t5 = np.array(range(1,4),dtype="float32")
print(t5)
print(t5.dtype)
# numpy中的bool数据类型
t6 = np.array([0,1,1,0,1,0,0],dtype="bool")
print(t6)
print(t6.dtype)
print("//")
# 调整数据类型
t7 = t5.astype("int8")
print(t5.dtype)
print(t7.dtype)
print("***************************")
t5.dtype = "int8"
print(t5.dtype)
# numpy中的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
# 修改浮点型小数位数
t8 = np.round(t7,2) #保留两位小数
print(t8)
数组的形状和运算
a.shape
查看数组形状
import numpy as np
t1 = np.arange(12)
print(t1)#t1:ndarray:(12,)
print(t1.shape)#输出结果:(12,)
t2 = np.array([[1,2,3],[4,5,6]])
print(t2)#t2:ndarray:(2,3)
print(t2.shape)#输出结果:(2,3)
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)#t2:ndarray:(2,2,3)
print(t3.shape)#输出结果:(2,2,3)
2.a.reshape(3,4)
修改数组形状
t4 = np.arange(12)
print(t4)
print(t4.reshape(3,4))
print(t4.reshape(3,5))#无法变成该形状的数组
t5 = np.arange(24).reshape(2,3,4)
print(t5)
print("---------------")
# t5.reshape(4,6)有返回值,不会改变t5的值
print(t5.reshape(4,6))
print("---------------")
print(t5)
print("---------------")
# 将t5变成一维数组
print(t5.reshape(24,))
print("---------------")
# 弄清如下两种情况
print(t5.reshape(24,1))
print("---------------")
print(t5.reshape(1,24))
print("#######################")
3.t5.flatten()
,将t5变成一维数组
当不知道t5有多少数据时,将t5变成一维数组
#法一
t5 = np.arange(24).reshape(2,3,4)
print(t5.reshape(t5.shape[0]*t5.shape[1]*t5.shape[2],))
print("#######################")
# 法二:
print(t5.flatten())
4.数组和数的运算
#数组的运算
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
print(t6)
print("************************")
print(t6+2)
print("************************")
print(t6-2)
print("************************")
print(t6*2)
print("************************")
print(t6/2)
print("************************")
print(t6/0)
结果为:
5.数组和数组的运算
①情况一:
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t7 = np.arange(100,124).reshape(4,6)
print(t7)
print("**************************")
print(t6+t7)
print("**************************")
print(t6-t7)
print("**************************")
print(t6*t7)
print("**************************")
print(t6/t7)
结果为:
②情况二:
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t8 = np.arange(0,6)
print(t8)
print(t6)
print(t6-t8)
③情况三:
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t9 = np.arange(4).reshape(4,1)
print(t9)
print(t6)
print(t6-t9)
④情况四:
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t10 = np.arange(10)
print(t10)
print(t6)
# 无法计算
print(t6-t10)
print("*"*100)
numpy的索引和切片
1.取一行一列或者多行多列
import numpy as np
us_file_path = "./dataCSV/data.csv"
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)
print("*"*100)
print(t2)
print("*"*100)
# 取行
print(t2[2])
print("*"*100)
# 取连续多行
print(t2[2:])
print("*"*100)
# 取不连续多行,取第2,8,10行
print(t2[[2,8,10]])
print("*"*100)
# 取行 print(t2[行,列])
# print(t2[1,:])
# print(t2[2:,:])
# print(t2[[2,8,10],:])
# 取列
print(t2[:,0]) #取所有行第一列数据
print("*"*100)
#取连续多列
print(t2[:,2:])#取所有行第三列后的所有列数据
print("*"*100)
#取连续多列
print(t2[:,[0,2]])##取所有行第一列和第三列的数据
print("*"*100)
#取行和列,取第三行,第四列的值
a = t2[2,3]
print(a)
print(type(a))
print("*"*100)
#取多行和多列,取第三行到第五行,第二列到第四列的值(取的是行和列交叉的位置)
b = t2[2:5,1:4]
print(b)
print("*"*100)
#取多个不相邻的点
#该结果为(0,0) (2,1) (2,3)
c = t2[[0,2,2],[0,1,3]]
print(c)
2.行列交换
3.数组拼接
①np.vstack(t1,t2)
用于竖直拼接
②np.hstack(t1,t2)
用水平拼接
4.数组转置
转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便地去处理数据。有以下三种方法:
①t.transpose()
②t.swapaxes(1,0)
③t.T
5.numpy读取数据
6.numpy生成随机数
7.numpy中的布尔索引
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
print(t6<10)
print("*"*100)
t6[t6<10]=3
print(t6)
print("*"*100)
print(t6[t6>20])
print("*"*100)
t6[t6>20]=20
print(t6)
print("*"*100)
8.三元运算
# 三元运算
#把t6中小于等于3的替换成100,否则替换成300
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
print(np.where(t6<=3,100,300))
print("*"*100)
print(t6)
print("*"*100)
## 9.将一个数值赋值为nan
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t6 = t6.astype(float)
t6[3,3]=np.nan
print(t6)
9.numpy中的clip
numpy中的nan和inf
numpy中的nan的注意点
处理:给nan赋均值
import numpy as np
#给nan赋均值
def fill_ndarray(t1):
for i in range(t1.shape[1]):
temp_col = t1[:,i]
nan_num = np.count_nonzero(temp_col != temp_col)
if nan_num != 0:#不为0,说明当前这列中有nan
temp_not_nan_col = temp_col[temp_col == temp_col] #当前一列不为nan的array
#选中当前为nan的位置,把值赋值为不为nan的均值
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
return t1
if __name__ == '__main__':
t1 = np.arange(12).reshape((3, 4)).astype("float")
t1[1, 2:] = np.nan
print(t1)
print("*"*100)
t1 = fill_ndarray(t1)
print(t1)
numpy中的常用函数
numpy中的copy和view
以上是关于Numpy学习的主要内容,如果未能解决你的问题,请参考以下文章
优秀!Python神器 NumPy 登上顶刊 Nature!