科学计算库-Numpy

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,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值