学习环境:jupyter
import numpy as np
- 1.数组的加减乘除
arr1 = np.array([2,4,6,8])
arr2 = np.array([1,2,3,4])
arr3 = arr1 + arr2
arr4 = arr1 - arr2
arr5 = arr1 * arr2
arr6 = arr1 / arr2
print(arr3)
print(arr4)
print(arr5)
print(arr6)
[ 3 6 9 12]
[1 2 3 4]
[ 2 8 18 32]
[2. 2. 2. 2.]
- 2.数组的比较
# 比较后得到的是布尔值数组
arr1 > arr2
[ True, True, True, True]
- 3.数组的切片和索引
# 前开后闭
arr1d = np.array([1,2,3,4,5,6,7,8,9])
print(arr1d[1:-4])
[2 3 4 5]
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 取第二组第2个数
print(arr2d[1][1])
# 取第一组1~3个数
print(arr2d[0][0:3])
5
[1,2,3]
# 二维数组的切片 数组名[行索引或切片 , 列索引或切片]
print(arr2d[0:2,1:2])
print(arr2d[:2,:2])
[[2]
[5]]
[[1 2]
[4 5]]
- 4.布尔索引
# 索引2468
print(arr2d[arr2d%2==0])
# 索引13579
print(arr2d[arr2d%2==1])
[2,4,6,8]
[1, 3, 5, 7, 9]
- 5.数组的其他属性
arr_4d = np.ones((3,3,3,3),dtype='int64')
# 数组的维度
print(arr_4d.ndim)
# 数组的形状
print(arr_4d.shape)
# 数组的元素个数
print(arr_4d.size)
# 数组的数据类型
print(arr_4d.dtype)
# 数组的转置(行变列,列变行)
print(arr_4d.T)
4
(3, 3, 3, 3)
81
int64
- 6.修改数据类型
numpy.dtype(object, align, copy)
- object - 要转换为的数据类型对象
- align - 如果为 true,填充字段使其类似 C 的结构体。
- copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
# dtype属性查看当前数组的数据类型
# astype方法修改数据类型
float_arr1 = np.array([1.0,2.0,3.0,4.0])
print(float_arr1.dtype)
int64_arr1 = float_arr1.astype(np.int64)
print(int64_arr1)
float64
[1 2 3 4]
- 7.处理数组的形状
list1=[1,2,3,4,5,6]
list2=[7,8,9,10,11,12]
arr=np.array([list1,list2])
print(arr)
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order=‘C’)
- arr:要修改形状的数组
- newshape:整数或者整数数组,新的形状应当兼容原有形状
- order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。
# 改变行列(输入不符合数组大小的值会报错)
arr_1 = arr.reshape(3,4)
print(arr_1)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
# 可以改变数组维度
arr_2 = np.array([1,2,3,4,5,6,7,8])
arr_2 = arr_2.reshape((2,2,2))
print(arr)
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
# 输入负数会自动计算(不管是什么负数)
arr_3 = arr.reshape(2,-100)
print(arr_3)
numpy.ndarray.flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,
重新分配内存,生成一个新的数组,修改flatten后的数组不会影响原数组
numpy.ndarray.flatten(order=‘C’)
arr_4 = arr.flatten()
print(arr_4)
[ 1 2 3 4 5 6 7 8 9 10 11 12]
numpy.ravel
numpy.ravel() 展平的数组元素,顺序通常是"C风格",返回的是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组。
numpy.ravel(a, order=‘C’)
- 8.连接和分割数组
arr1 = np.array([1,2,3,4,9,10,11,12]).reshape(2,4)
print(arr1)
arr2 =np.array([5,6,7,8,13,14,15,16]).reshape(2,4)
print(arr2)
[[ 1 2 3 4]
[ 9 10 11 12]]
[[ 5 6 7 8]
[13 14 15 16]]
# axis=1/0,横向连接/竖直连接
arr3=np.concatenate([arr1,arr2],axis=1)
print(arr3)
[[ 1 2 3 4 5 6 7 8]
[ 9 10 11 12 13 14 15 16]]
平分数组
# 纵向切割
# 分成4等分 4个数组接受
arr4,arr5,arr6,arr7=np.split(arr3,4,axis=1)
print(arr4)
print(arr5)
[[ 1]
[ 9]
[ 5]
[13]]
[[ 2]
[10]
[ 6]
[14]]
#横向切割
arr8,arr9 = np.split(arr3,2,axis=0)
print(arr8)
[[ 1 2 3 4]
[ 9 10 11 12]]
# 不规则切割 3,6代表切割点
np.split(arr3,[3,6],axis=1)
[array([[ 1, 2, 3], [ 9, 10, 11]]),
array([[ 4, 5, 6], [12, 13, 14]]),
array([[ 7, 8], [15, 16]])]
附图:NumPy 数据类型
详细可以查看菜鸟驿站:https://www.runoob.com/numpy/numpy-tutorial.html