NumPy属性
arr=np.array([[1,2,3] ,[4,5,6]]) print("ndim: ",arr.ndim) # 2 二维数组 print("shape: ",arr.shape) #(2,3) 二行3列 print("size: ",arr.size) # 6, 一共六个元素 print("dtype: ",arr.dtype) # int 64 print("itemsize: ",arr.itemsize) # 8 , 每个int 64占8个字节# 生成0 - 14 的数字,重塑为 3 行5 列的二维数组 a=np.arange(15).reshape(3,5) print("数组的维度:",a.shape) # (3, 5) print("数组轴的个数:",a.ndim) # 2 print("数组元素类型: ",a.dtype) # int64 print("数组中每个元素的字节大小:",a.itemsize) # 8 print("数组元素的总个数:",a.size) # 15 print("类型查询:",type(a)) # <class 'numpy.ndarray'> print(a)
1)a.shape:返回元组(3,5),代表数组3 行 5 列;元组长度就是维度数
2)a.ndim:轴 / 维度数量,这里是2,二维数组
3)a.dtype:数组内元素的数据类型,默认int64(64 位整数)
4)a.itemsize:单个元素占用内存字节数,int64占 8 字节
5)a.size:数组全部元素总数3*5=15:把一维数组,重新调整形状为 3 行 5 列,
6)np.arange(15):生成 [0,1,2,3,...,14]
7).reshape(3,5)
元素总数必须匹配(3*5=15)
创建ndarray
- ndarray 是 NumPy 的多维数组对象,特点:
1)下标从 0 开始
2)数组内所有元素必须是同一种数据类型
3)运算速度快、占用内存少,支持矢量运算与广播机制array ()
- np.array() 是最基础的创建数组的方法,接收列表 / 元组等序列,生成 ndarray
import numpy as np a=np.array([2,3,4]) print("数组a元素:",a) print("数组a类型:",a.dtype) b=np.array([1.2,3.2,4.5]) print("数组b元素:",b) print("数组b类型:",b.dtype)
数组a里面都是整数,自动识别为int64(整型)
数组b里面都是小数,自动识别为float64(浮点型)- 补充
列表同时包含整数 + 浮点数,会自动全部转为浮点数:c=np.array([1,2.5,3]) print(c.dtype) # float64np.zeros () /np.ones () /np.empty ()
知识点
- shape 参数:
1)(3,4) → 二维数组:3 行 4 列
2)(2,3,4) → 三维数组:2 块,每块 3 行 4 列# zero 创建3行4列 全0二维数组 zeros1=np.zeros((3,4)) print(zeros1) # ones 创建2块 每块3行4列的三维全1数组 ones1=np.ones((2,3,4)) print(ones1) # empty 创建2行3列数组,值为内存残留随机数 empty1=np.empty((2,3)) print(empty1)
np.arange ()
np.arange() 和 Python 内置range()很像,生成一维 ndarray 数组
区别:python range只能整数;np.arange支持小数步长- 语法:
np.arange(start, stop, step, dtype)1)
start:起始值(包含),默认 0
2)stop:终止值(不包含)
3)step:步长,默认 1
4)dtype:指定数组元素类型np_arange=np.arange(10,20,5,dtype=int) print("arange创建np_arange: ",np_arange) print("arange创建np_arange的元素类型:",np_arange.dtype) print("arange创建np_arange的类型: ",type(np_arange))
核心记住:start 取,stop 不取
10 取 10
10+5 取 15
15+5 不取 20np.matrix ()
matrix(简称mat)是ndarray的子类,只能创建二维矩阵,不能生成一维、三维
- 特点:矩阵相乘用*直接运算(和普通 ndarray 不一样)
- 不推荐优先用 matrix,日常开发更推荐直接用 ndarray 数组
- matrix和 asmatrix
1)返回的对象类型完全一样,都是 matrix(二维矩阵,ndarray 子类)
2)唯一差别:是否复制内存
a)np.matrix():
默认 copy=True →
新建一份独立数据副本,修改新矩阵不会影响原来数组
b)np.asmatrix():
等价 matrix(data, copy=False) →
尽量不复制,共用同一块内存,修改它会影响原始数组- 三种写法
import numpy as np # 写法1:字符形式,空格分隔同行元素,分号 ; 换行 x1=np.matrix("1 2;3 4") print(x1) # 写法2: 字符串,逗号分隔同行元素,分号 ; 换行 x2=np.matrix("1,2;3,4") print(x2) # 写法3 传入二维列表生成矩阵 x3=np.matrix([[1,2,3,4],[5,6,7,8]]) print(x3)
创建随机数矩阵
三个函数对比
- 小知识点:
1)返回值都是numpy.ndarray(numpy 数组 / 矩阵)
2)randint 是左闭右开:randint(-1,5) 能取到 -1,取不到 5,最大整数是 4
3)uniform 均匀分布,区间内每个数出现概率相等# 1. np.random.rand(行数,列数): 生成【0.0,1.0) 之间的随机浮点数 # arr=np.random.rand(3,4) # print(arr) # print(type(arr))
# 2. np.random.randint(low,high,size = (行,列)) 生成 [low,high) 的随机整数 arr=np.random.randint(-1,5,size=(3,4)) print(arr) print(type(arr))
# 3. np.random.uniform(low,high,size=(行, 列) 生成 [low, high)的均匀分布随机浮点数 arr=np.random.uniform(-1,5,size=(3,4)) print(arr) print(type(arr))
ndarray 数据类型
dtype 参数:创建数组的时候,直接指定数组元素的数据类型,
格式:类型名+位数, 例如 float64、int32- astype() 方法:对已经存在的数组,生成一个新数组,转换数据类型
(原数组不会改变)# 初始化3行4列数组,数据类型为float64 zeros_float_arr=np.zeros((3,4),dtype=np.float64) print(zeros_float_arr) print(zeros_float_arr.dtype)
- 转换数据类型
# astype转换数据类型,将自己 已有的数据类型转换为int32 zeros_float_arr=np.zeros((3,4),dtype=np.float64) zeros_int_arr=zeros_float_arr.astype(np.int32) print(zeros_int_arr) print(zeros_int_arr.dtype)
- 补充
1)np.float64:双精度浮点数,占 8 字节;np.int32:32 位整型,占 4 字节
2)astype不会修改原数组,是返回新数组,必须用变量接收返回值