numpy学习笔记

numpy学习笔记

笔记一

1、什么是numpy

Python中做科学计算的基础库,多用于在大型、多维数组上执行数值运算;

2、创建数组的方法

方式一,通过np.array()创建,中间传递列表或元组等

# 通过np.array()创建数组
array = np.array([1,2,3,4,5,6])
array2 = np.array((1,2,3,4,5,6))
print(array)
print(array2)

方式二、通过np.arange()创建数组,里面3个参数,第一个是起始值,第二个是终止值,第三个是步长

# 通过np.arange()创建数组
array = np.arange(0, 10, 2)
print(array)

3、数组属性

属性1,dtype 数据类型

# 通过dtype查看数据类型
array = np.array([1,2,3,4,5,6])
print(array.dtype)

在创建数组的方法中,也有dtype参数用于指定创建的数组中的数据类型

# 通过dtype属性指定数据类型
array = np.array([1,2,3,4,5,6], dtype="float32")
print(array.dtype)

也可以使用astype方法去修改数组的数据类型

# 通过astype函数修改数据类型
# 这里注意astype函数有返回值,它不会去修改array,所以需要我们使用array去接收返回值,如果不接收array不改变数据类型
array = np.array([1,2,3,4,5,6])
print(array.dtype)
array = array.astype("float32")
print(array.dtype)

属性2、shape 查看形状

# 通过shape属性查看形状
array = np.array([1,2,3,4,5,6])
print(array.shape)

通过reshape方法可以修改数组的形状

# 通过reshape方法修改形状
array = np.array([1,2,3,4,5,6])
print(array.shape)
array = array.reshape((2,3))
print(array.shape)

注意,array.reshape((n, 1))和array.reshape((n,))是不同的,第一个是2维的,第二个是1维的。

array = np.array([[1,2,3],[4,5,6]])
array = array.reshape((6,))
print(array.shape)
array = array.reshape((6,1))
print(array.shape)

4、数组计算

情况1,数组与数字计算。广播原则,数字和数组内每一个元素去计算

array = np.array([[1,2,3],[4,5,6]])
print(array + 2)
print(array * 2)
print(array / 2)

情况2,数组与数组计算
如果两个数组形状相同,则对应位置执行计算

array = np.array([[1,2,3],[4,5,6]])
array2 = np.array([[4,5,6],[7,8,9]])
print(array + array2)
print(array * array2)
print(array / array2)

如果两个数组形状不相同,如果符合广播原则,则可以计算。不符合则不能计算
广播原则:
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

示例1:这里array形状为(3,3,2),array2形状为(3,2),形状不同,但(3,2)与(3,3,2)的后面的(3,2)相同,满足广播原则,所以可以计算

array = np.array([[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]])
print(array.shape)
array2 = np.array([[1,2],[4,6],[8,9]])
print(array2.shape)
array2 + array

示例2:这里array形状为(3,3,2),array2形状为(3,3),形状不同,同时(3,3)与(3,3,2)的后面的(3,2)不相同,不满足广播原则,所以不能计算,会报错
补充,广播原则里说“如果两个数组的后缘维度,即从末尾开始算起的维度的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。”,所以要从末尾开始看起,而不能说看(3,3)与(3,3,2)的前面的(3,3)相同就说它们可以计算

array = np.array([[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]])
print(array.shape)
array2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(array2.shape)
array2 + array

示例3:

array = np.array([[[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]], [[1,2],[3,4],[5,6]]])
print(array.shape)
array2 = np.array([1,2])
print(array2.shape)
array2 + array

5、其他操作

np.round(array, n), array中的元素保留n位小数

# np.round(array, n) 对数组array保留n位小数
array = np.array([2.35, 3.23, 5.67])
array = np.round(array, 1)
print(array)

array.flatten() array变成1维数组

# array.flatten() array变成1维数组
array = np.array([[1,2,3],[4,5,6]])
array = array.flatten()
print(array)

笔记二

1、数组的转置

对于numpy中的数组来说就是在对角线方向交换数据
方式1,array.transpose()
方式2,array.T

/array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
# 数组转置
print(array.transpose())
print(array.T)

2、数组的索引和切片

以下是对二维数组操作
行操作
取某一行:array[行标]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第3行
print(array[2])

取连续多行:array[行标1:行标2]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1至3行
print(array[0:3])

取不连续多行:array[[行标1, 行标2,…]]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1和3行
print(array[[0,2]])

列操作
取一列:array[:,列标]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第3列
print(array[:,2])

取连续的多列:array[:,列标:]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1至3列
print(array[:, 0:3])

取不连续多列:array[:,[列标1,列标2,…]]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1和3列
print(array[:, [0,2]])

取某一行一列的值:array[行标,列标]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第2行第4列的值
print(array[1,3])

取多行多列:array[行标:行标2, 列标:列标2]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取第1至3行,第1至3列的值
print(array[0:3, 0:3])

取不相邻的点:array[[行标,列标],[行标,列],…]

array = np.array(range(0, 36, 1)).reshape(4,9)
print(array)
print("===================")
# 取不相邻的点
print(array[[1,2], [2,3]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值