这个模块是用C语言写的模块,主要是用于科学计算。而使用这个模块是基于多维数组的。
一、数组里的元素必须是同一类型的数据
二、数组的大小是固定的。
pip install numpy
数组对象的创建一般有以下的方法(注意首先导入numpy)
import numpy as np # 创建对象的方法,均可带参数dtype指定数组元素的类型 # 方法一、 # arr = np.array([1, 2, 3, 4]) # 方法二、类似于range,不过此处步长可为小数 # arr = np.arange(3, 10, 0.2) # 方法三、前两个参数与arange一样,但第三个参数表明元素的个数 # arr = np.linspace(3, 10, 10) # 方法四、由于创建的数组不能为空,以下创建的数组的元素均是0 # arr = np.zeros(3) # [0. 0. 0.] # arr = np.zeros((3, 5)) # 创建的是3个数组,而每个数组含有5个元素 """ [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] """ # 方法五、与四类似,但元素均是1 # arr = np.ones(4) # arr = np.ones((3, 5)) # 方法六、随机从内容里筛选出废弃的内存地址 arr = np.empty((3, 5))
布尔型:bool_
整数型:int_ int8 int16 int32 int64
无符号整数型:uint8 unit16 uint32 uint64
浮点型:float_ float16 float32 float64
复数型:complex_ complex64 complex128
数组与一般的数值型数据也可以进行加减乘除等运算,运算结果是每一个元素都与数值型数据进行运算,例子如下:
# 与数值型数据的运算 arr = np.arange(0, 15) print(arr * 2) # [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28]
数组也可以与数组之间进行运算,但注意必须要求两个数组的shape是一样,运算过程是对同一个索引的元素进行运算,例子如下:
# 与数组的运算 arr = np.arange(0, 15) arr1 = np.arange(3, 18) print(arr*arr1) # [ 0 4 10 18 28 40 54 70 88 108 130 154 180 208 238]
一维的索引和列表是一样的,但二维的也可以和列表一样,也可以使用[行号,列号]获取,如下:
# 索引 array2d = np.arange(0, 15).reshape((3, 5)) """ [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] """ # 获取7的方式一,但不推荐 print(array2d[1][2]) # 7,第二列的第3个,和列表是一样的 # 获取7的方式二,推荐 print(array2d[1, 2])
一维的和列表切片是一样的,这里主要是说明多维的切片
用法:ndarray对象[行切片,列切片]
array2d = np.arange(0, 15).reshape((3, 5)) """ [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] """ # 获取第二行到第三行的第四个数:数组对象[行数切片,列切片] print(array2d[1:, 3]) # 获取第1行到第二行的前3个数 print(array2d[0:3, :3])
对切片进行赋值,会把切片的内容改为设置的值,如下:
# 切片赋值 arr1 = np.arange(0, 15) # 把前4个数都改为0 arr1[:5] = 0 print(arr1) # [ 0 0 0 0 0 5 6 7 8 9 10 11 12 13 14]
但注意以下情况:
arr2 = arr1[0:5]
这样arr1和arr2是同一内存地址,任何一个数组改变,另外一个也会改变
arr1 = np.arange(0, 15) # 引用了arr1,这样其实它们是不会复制,而是指向同一内存地址,所以arr2改变了,arr1也会改变 arr2 = arr1[3:8] arr2[0] = 100 print(arr1) # [ 0 1 2 100 4 5 6 7 8 9 10 11 12 13 14]
而要实现这两个数组是不同的内存地址,可使用copy()方法,则彼此不会影响
arr1 = np.arange(0, 15) arr2 = arr1[3:8].copy() arr2[0] = 100 print(arr1) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
ndarray对象具有以下属性:
dtype:元素类型
size:元素个数
ndim:维度
shape:返回一个元组(行数,列数)
T:行与列的转换
array2d = np.arange(0, 15).reshape((3, 5)) print(array2d.dtype) # int32 print(array2d.size) # 15个元素 print(array2d.ndim) # 维度 print(array2d.shape) # (3,5)表示3行5列 print(array2d.T) # 行与列进行置换
原文:https://www.cnblogs.com/Treelight/p/12324254.html