一、数据结构
import numpy as np
# ---------- ndarray ----------
x = np.array([1, 2, 3])
print(x)
y = np.array([[1, 2, 3], [4, 5, 6]])
print(y)
# ---------- 思考题 ----------
# 输出什么?
z = np.array([1, 2, '3'])
print(z)
注意:ndarray 的下标从 0 开始,且数组里的所有元素必须是相同类型
二、ndarray属性
ndarray
拥有的属性
ndim 属性:维度个数
shape 属性:维度大小
dtype 属性:数据类型
import numpy as np
# 创建一个2x4的二维数组,数据类型为float32,ndmin=2参数确保了结果至少是一个二维数组。
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=np.float32, ndmin=2)
print(x)
print(x.ndim) # 数组的维度(几维数组)
print(x.shape) # 数组的"形状"(几乘几的数组)
print(x.dtype) # 数据类型
print(x.itemsize) # 每个数据所占的字节长度, 取决于数据类型
三、ndarray-形状改变
import numpy as np
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=np.int32, ndmin=2)
print(x)
# ---------- reshape ----------
# 改变"形状"
x1 = x.reshape(2, 2, 2) # shape: (2, 2, 2)
print("*"*20,"x1","*"*20,"\n",x1)
#
# 如果你懒得计算维度, 最后一个维度可以使用-1, numpy会自己计算的
x2 = x.reshape(4, -1) # shape: (4, 2)
print("*"*20,"x2","*"*20,"\n",x2)
# 数据的"拉伸"
x3 = x.ravel()
print("*"*20,"x3","*"*20,"\n",x3)
x4 = x.reshape(-1) # 推荐使用这个方法
print("*"*20,"x4","*"*20,"\n",x4)
# ---------- 转置 ----------
# axes: 维度(注意: 可以指定多个维度之间的转换)
x5 = np.transpose(x, axes=(0, 1))
print("*"*20,"x5","*"*20,"\n",x5)
#
# 简写
x6 = x.T
print("*"*20,"x6","*"*20,"\n",x6)
四、ndarray-随机数创建
import numpy as np
# ---------- rand ----------
x1 = np.random.rand(5) # [0, 1), shape: 5
print("*"*20,"x1","*"*20,"\n",x1)
print(x1.shape)
x2 = np.random.rand(2, 5) # [0, 1), shape: (2, 5)
print("*"*20,"x2","*"*20,"\n",x2)
#
# ---------- randint ----------
x3 = np.random.randint(1, 6, size=(2, 5)) # [1, 6) size: (2, 5)
print("*"*20,"x3","*"*20,"\n",x3)
#
# ---------- uniform ----------
#np.random.uniform 函数用于生成在指定范围内均匀分布的随机数。
x4 = np.random.uniform(1, 6, size=(2, 5)) # [1, 6) size: (2, 5)
print("*"*20,"x4","*"*20,"\n",x4)
#
# ---------- normal ----------
# 所谓标准正态分布(),对应于np.random.normal(loc=0,scale=1, size)。
# loc: 均值, scale: 标准差
x5 = np.random.normal(loc=0.0, scale=1.0, size=(2, 5))
print("*"*20,"x5","*"*20,"\n",x5)
五、ndarray-列表创建
import numpy as np
# ---------- 列表创建 ----------
x1 = np.array([[1, 2, 3],
[4, 5, 6]], dtype=np.int32, ndmin=2)
print(x1)
x2 = np.array(list(range(10)), dtype=np.float32)
print(x2)
六、ndarray-零、单位、空、对角矩阵
import numpy as np
# ---------- 零矩阵 ----------
x1 = np.zeros((3, 3), dtype=np.float32)
print(x1)
# ---------- 单位矩阵:全为1的矩阵 ----------
x2 = np.ones((2, 2), dtype=np.int32)
print(x2)
#
# ---------- 空矩阵 ----------
# 全部为垃圾值
x3 = np.empty((4, 4), dtype=np.float64)
print(x3)
# ---------- 对角阵 ----------
x4 = np.eye(4)
print(x4)
#
# ---------- 仿照矩阵形状生成零矩阵 ----------
x = np.array([[1, 2], [3, 4]])
print(x)
# 仿照上面的矩阵形状, 创建零矩阵
x5 = np.zeros_like(x)
print(x5)
七、ndarray-数组建立
import numpy as np
# ---------- asarray ----------
# 任何可以被转为 ndarray 的数据类型, 有且不限于 list
x1 = np.asarray(range(10))
print(x1)
# ---------- astype ----------
# astype 修改数组的数据类型, 生成一个新的数组
x1 = x1.astype(dtype=np.float32)
print(x1)
# ---------- arange ----------
# 类似于range(start, stop, step)
x2 = np.arange(0, 50, 2)
print(x2)
# ---------- linspace ----------
# 等差数列
# [start, stop]: 注意!!! 两边都是闭区间
# num: 个数
# endpoint: 是否包含stop. 默认包含[start, stop], 如果不包含[start, stop), 一般来讲, 不动这个参数
x3 = np.linspace(0, 50, 6)
print(x3)
#
# # ---------- logspace ----------
# # 等比数列
# # [start, stop]: 注意!!! 两边都是闭区间
# # num: 个数
# # base=10.0: 底数
# # 我们让开始点为0,结束点为0,元素个数为10,看看输出结果。为什么是这样子?难道不都是0吗?
# # 因为logspace中,开始点和结束点是10的幂,0代表10的0次方,9代表10的9次方。我们看下面的例子
# # 假如,我们想要改变基数,不让它以10为底数,我们可以改变base参数,将其设置为2试试。
x4 = np.logspace(0, 10, 11,base=2)
print(x4)
八、ndarray-随机打乱
import numpy as np
# ---------- 一维数组 ----------
print('---------- 一维数组 ----------')
x1 = np.arange(10)
print(x1)
np.random.shuffle(x1)
print(x1)
# ---------- 多维数组 ----------
print('---------- 多维数组 ----------')
# 注意: 多维数组只会打乱第一个维度
x2 = np.arange(100).reshape(10, 10)
print(x2)
#
np.random.shuffle(x2)
print(x2)
#
# 推荐: 先打乱, 再reshape
print(' 先打乱, 再reshape')
x3 = np.arange(100)
print(x3)
np.random.shuffle(x3)
x3 = x3.reshape(10, 10)
print(x3)