NumPy基础操作(1)
NumPy基础操作(1)
(注:记得在文件开头导入import numpy as np)
目录:
- 数组的创建
- 强制类型转换与切片
- 布尔型索引
- 结语
数组的创建
- 相关函数
np.array(), np.zeros(), np.zeros_like(), np.ones(), np.ones_like(), np.empty(), np.asarray()
- 调用方法
data1 = [1.2, 23, 24, 1.8] arr1 = np.array(data1) print(arr1) print(arr1.ndim) #数组的维度 print(arr1.shape) #数组的形状 print((arr1.dtype)) #数组元素的数据类型 #输出结果 out: [ 1.2 23. 24. 1.8] 1 (4,) float64
data2 = [[1, 2, 3, 4], [5, 6, 7, 9]] #如果要用array生成多维的数组必须要元素个数对称 arr2 = np.array(data2) arr2_like = np.zeros_like(arr2) #产生形状与arr2相同的全0数组 arr4 = np.ones((3,2)) arr7 = np.asarray(data2) #将输入转换为一个ndarray数组 print(arr2);print("************") print(arr2_like);print("************") print(arr4);print("************") print(arr7) #输出结果 out: [[1 2 3 4] [5 6 7 9]] ************ [[0 0 0 0] [0 0 0 0]] ************ [[1. 1.] [1. 1.] [1. 1.]] ************ [[1 2 3 4] [5 6 7 9]]
强制类型转换与切片
- 相关函数
array.astype(), array[x:y] #array是一个已定义的数组 np.float64, np.int64, np.string_ #数组基础数据类型
- 强制类型转换
#在生成数据时就直接指定ndarray数组的类型 arr8 = np.array([1,1,7], dtype=np.float64) print(arr8.dtype) print("************") #通过ndarray的方法astype更改转换数组的类型,强制类型转换 arr9 = arr8.astype(np.int64) print(arr9.dtype) print("************") #Numpy的数据类型:np.object, np.string_, np.unicode_ numeric_strings = np.array(['1.23', '-9.6', '42'], dtype=np.string_) print(numeric_strings.astype(float).dtype) print("************") #输出结果 out: float64 ************ int64 ************ float64 ************
- 数组切片
#数组切片是原数组的视图,对切片的任何改变都会在原始数组数据上得到体现 #for example arr = np.arange(10) arr_slice = arr[5:8] arr_slice[1] = 12432 print(arr) #输出结果:[ 0 1 2 3 4 5 12432 7 8 9] arr_slice[:] = 187 print(arr) #输出结果:[ 0 1 2 3 4 187 187 187 8 9] #如果你是真的想要一份数组的复制版本,你需要明显的表达出来 arr_copy = arr[:].copy() arr_copy[:] = 1 print(arr) print(arr_copy) #输出结果:[ 0 1 2 3 4 187 187 187 8 9] # [1 1 1 1 1 1 1 1 1 1] #二维数组的访问 arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr2d[2]) print(arr2d[0,2]) #这两种索引效果是相同的 print(arr2d[0][2]) print(arr2d[:2, 1:]) #在切片中再切片 #输出结果:[7 8 9] # 3 # 3 # [[2 3] # [5 6]]
布尔型索引
- 布尔型索引
names = np.array(['Bob','Joe', 'Will', 'Bob', 'Will', 'Joe', 'Jason']) data = np.random.randn(7,4) print(names=='Bob') print(data[names == 'Bob', 2:]) #线索出为True的行组成新的数组,再进行数组切片 #输出结果 #[ True False False True False False False] #[[ 0.26361357 -0.98694019] # [ 0.34286995 0.0441788 ]] mask =(names=='Bob')|(names=='Will') #在布尔型数组中Python关键之and 以及or无效 print(mask) #输出结果 #[ True False True True True False False] #通过布尔性数组更改数组中的值 data[data < 0] = 0 #将数组中小于0的元素的值全部改为0
结语
第一次写博客排版和程序都有些粗糙,望见谅。(注:相关知识点从《用Python进行数据分析》搬运至此)