文章目录
01.Numpy概述
import numpy as np
array = [1,2,3,4,5]
array + 1
TypeError Traceback (most recent call last)
Cell In[5], line 2
1 array = [1,2,3,4,5]
----> 2 array + 1
TypeError: can only concatenate list (not “int”) to list
array = np.array([1,2,3,4,5])
print(type(array))
<class ‘numpy.ndarray’>
array2 =array + 1
array2
array([2, 3, 4, 5, 6])
array2 + array
array([ 3, 5, 7, 9, 11])
array2 * array
array([ 2, 6, 12, 20, 30])
- 支持索引和切片
array[3]
4
array
array([1, 2, 3, 4, 5])
array[1:4]
array([2, 3, 4])
- 列表list没有shape这个方法,numpy可以
array.shape #输出为1维数组,只有5个元素
(5,)
np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
02.Array数组
import numpy as np
list = [1,2,3,4,5]
array = np.array(list)
array
array([1, 2, 3, 4, 5])
type(array) #类型
numpy.ndarray
- array.dtype指的是数组(array)的数据类型(data type)。dtype是data type的缩写。
- np.array要求里面必须是相同数据类型,否则它会做自动的向下转换操作
array.dtype
dtype(‘int32’)
list2 = [1,2,3,4,5.0]
array2 = np.array(list2)
array2
array([1., 2., 3., 4., 5.])
array2.dtype
dtype(‘float64’)
list3 = [1,2,3,4,'5']
array3 = np.array(list3)
array3.dtype #输入为当前字符串的编码形式
dtype(‘<U11’)
-
array.itemsize属性表示数组中每个元素所占用的字节数
-
dtype定义了数组中元素的数据类型,而itemsize则基于这个数据类型告诉我们每个元素实际占用的存储空间大小。
-
不同的数据类型有不同的大小,例如:
-
int8(8位整数)的itemsize是1字节
-
int32(32位整数)的itemsize是4字节
-
float64(64位浮点数)的itemsize是8字节
-
complex128(128位复数)的itemsize是16字节
array.itemsize
4
* 在NumPy中,array.size属性表示数组中所有元素的总数。这个属性与数组的形状(shape)有关,因为形状定义了数组的维度和每个维度的大小,而size则基于这些维度计算出数组中元素的总数。
- 例如,如果有一个二维数组,其形状为(3, 4),那么这个数组有3行和4列,总共有3 * 4 = 12个元素。因此,这个数组的size属性值为12。
array.size
5
np.size(array) #等价于array.size
5
np.shape(array) #等价于array.shape
(5,)
-
在NumPy中,array.ndim属性表示数组的维度数。这个属性告诉我们数组是几维的,即它有多少个轴(axis)。
-
一维数组(向量)的ndim是1。
-
二维数组(矩阵)的ndim是2。
-
三维数组的ndim是3。
-
以此类推。
array.ndim
1
- 在NumPy中,array.fill(0)是一个方法,用于将数组中的每个元素都填充(设置)为指定的值,在这个例子中是0。这个方法会直接修改原数组,而不是创建一个新的数组。
array
array([1, 2, 3, 4, 5])
array.fill(0)
array
array([0, 0, 0, 0, 0])
索引与切片:和python一样,还是从0开始的
list = [1,2,3,4,5]
array = np.array(list)
array[0]
1
array[1:3]
array([2, 3])
array[-2:]
array([4, 5])
03.数组结构
矩阵格式(多维的形式)
array = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
array
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
array.shape
(3, 3)
array.size
9
array.ndim #二维
2
array[1,1] #取5这个元素,索引是1 1
5
赋值
array[1,1] = 10
array
array([[ 1, 2, 3],
[ 4, 10, 6],
[ 7, 8, 9]])
取第1行
array[1]
array([ 4, 10, 6])
取第1列 取的第一列2,10,8分别又是第0、1、2行的元素,都要取到所以是冒号
array[:,1]
array([ 2, 10, 8])
比如,取第0行的前两个值
array[0,0:2]
array([1, 2])
* array2 = array指向了同一地址,修改array2的同时相当于也修改了array
array
array([[ 1, 2, 3],
[ 4, 10, 6],
[ 7, 8, 9]])
array2 = array
array2
array([[ 1, 2, 3],
[ 4, 10, 6],
[ 7, 8, 9]])
array2[1,1] = 100
array2
array([[ 1, 2, 3],
[ 4, 100, 6],
[ 7, 8, 9]])
- 为避免上述情况,可使用copy()方法,这样可以互不干扰
array
array([[ 1, 2, 3],
[ 4, 100, 6],
[ 7, 8, 9]])
array2 = array.copy()
array2
array([[ 1, 2, 3],
[ 4, 100, 6],
[ 7, 8, 9]])
array2[1,1] = 10000
array2
array([[ 1, 2, 3],
[ 4, 10000, 6],
[ 7, 8, 9]])
array
array([[ 1, 2, 3],
[ 4, 100, 6],
[ 7, 8, 9]])
在NumPy中,np.arange函数用于生成一个等差数列的数组
array = np.arange(0,100,10)
array
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
在NumPy中,mask = np.array([0,0,0,2,4,1], dtype=bool)这行代码创建了一个布尔类型的数组mask。数组中的元素是布尔值,这些值是由数组[0,0,0,2,4,1]中的整数转换而来的。
在Python中,整数0在布尔上下文中被视为False,任何非零整数被视为True。
这个布尔数组通常用于掩码操作,例如在NumPy中选择或过滤数据。例如,你可以使用这个掩码数组来选择另一个数组中对应于True值的元素。
mask = np.array([0,0,0,2,4,1,1,0,1,0],dtype=bool)
mask
array([False, False, False, True, True, True, True, False, True, False])
array[mask] #输出布尔值为true的对应值
array([30, 40, 50, 60, 80])
使用NumPy库的random模块生成了一个包含10个随机浮点数的一维数组。这些浮点数是在0到1之间均匀分布的。
random_array = np.random.rand(10)
random_array
array([0.41040667, 0.38638939, 0.96821504, 0.4190651 , 0.94009793,
0.64312584, 0.00302379, 0.8016214 , 0.45731577, 0.96583803])
mask = random_array > 0.5 创建了一个布尔掩码数组 mask,它基于 random_array 中的值是否大于0.5来决定每个元素的布尔值。
mask = random_array > 0.5
mask
array([False, False, True, False, True, True, False, True, False, True])
array[mask]
array([20, 40, 50, 70, 90])
array = np.array([10,20,30,40,50])
array > 30
array([False, False, False, True, True])
np.where函数是NumPy库中用于根据条件查找数组中元素的索引的工具。具体来说,np.where(array > 30)这个表达式会返回一个元组,其中包含满足条件array > 30的元素的索引。
np.where(array > 30)
(array([3, 4], dtype=int64),)
array[np.where(array>30)]
array([40, 50])
04.数组类型
创建了一个NumPy数组array,其中包含了整数1到5,并且指定了数组的数据类型为float32。这意味着数组中的每个元素都将被存储为32位浮点数。
32位比64位节约空间,推荐32位
array = np.array([1,2,3,4,5],dtype=np.float32)
array
array([1., 2., 3., 4., 5.], dtype=float32)
array.dtype
dtype(‘float32’)
在NumPy中,array.nbytes属性返回数组所占用的总字节数。这个值是数组中所有元素大小的总和,即数组中元素数量乘以每个元素的大小(array.itemsize)。
对于你提供的数组array = np.array([1, 2, 3, 4, 5], dtype=np.float32),每个元素是32位浮点数,即每个元素占用4字节。由于数组中有5个元素,所以整个数组占用的总字节数是:
5 个元素×4 字节/元素=20 字节
array.nbytes
20
array = np.array([1,10,3.5,'str'])
array
array([‘1’, ‘10’, ‘3.5’, ‘str’], dtype=‘<U32’)
当你创建一个NumPy数组并指定dtype=np.object时,你创建了一个对象数组。这种类型的数组可以包含任何类型的Python对象,包括数字、字符串、列表等。
array = np.array([1,10,3.5,'str'],dtype=object)
array
array([1, 10, 3.5, ‘str’], dtype=object)
array * 2
array([2, 20, 7.0, ‘strstr’], dtype=object)
- array 是一个已经存在的 NumPy 数组,包含整数 1 到 5。然后,np.asarray(array, dtype=np.float32) 这个函数调用会将这个数组转换为一个新的数组,其中的数据类型是 float32。
- 这个转换过程会将整数数据类型强制转换为 float32 类型的浮点数。这种转换通常用于确保数组中的数值可以进行浮点数运算,或者在需要特定数据类型的上下文中使用数组。
- 这个方法不会改变原始结构,而是重新创建一个数组
array = np.array([1,2,3,4,5])
array2 =np.asarray(array,dtype = np.float32)
array2
array([1., 2., 3., 4., 5.], dtype=float32)
array
array([1, 2, 3, 4, 5])
-
方法2
-
array.astype(np.float32) 是一个 NumPy 方法,用于将数组 array 中的元素转换为指定的数据类型,这里的指定类型是 np.float32,即32位浮点数。
-
这个方法不会改变原始数组 array,而是返回一个新的数组,其数据类型已经被转换为 float32。如果原始数组 array 中的元素是整数或具有更高精度的浮点数,它们将被转换(或向下转换)为单精度浮点数。
array.astype(np.float32)
array([1., 2., 3., 4., 5.], dtype=float32)
array
array([1, 2, 3, 4, 5])
05.数值运算
import numpy as np
array = np.array([[1,2,3],
[4,5,6]])
array
array([[1, 2, 3],
[4, 5, 6]])
当你调用 np.sum(array) 时,NumPy 会计算数组 array 中所有元素的总和
np.sum(array)
21
指定要进行的操作是沿着什么轴(维度)
np.sum(array,axis=0)
array([5, 7, 9])
array.ndim
2
加法计算
- np.sum(array, axis=0) 会沿着第一个轴(垂直方向)求和,对每一列的元素进行累加。
- np.sum(array, axis=1) 会沿着第二个轴(水平方向)求和,对每一行的元素进行累加。
np.sum(array,axis=1)
array([ 6,