Numpy使用(学习记录)

目录

一·Numpy介绍

二·Numpy简单使用

1.创建数组

1.将python序列转换为NumPy数组

2.内部NumPy数组创建函数

2.复制、连接或更改现有阵列

1.复制数组

2.连接数组

3.给数组添加行或列

4.对数组进行转置

三·参考文献



一·Numpy介绍

        NumPy(Numerical Python)是一个开源Python库,用于 几乎所有的科学和工程领域。这是通用的标准 在Python中处理数字数据,这是科学研究的核心 Python和PyData生态系统NumPy的用户包括从初级编码员到 经验丰富的研究人员进行最先进的科学和工业 研究和发展。NumPy API广泛用于Pandas、SciPy、 Matplotlib,scikit-learn,scikit-image和大多数其他数据科学和 科学Python包。

        NumPy库包含多维数组和矩阵数据结构 (you将在后面的部分中找到有关此的更多信息)。它提供 ndarray,一个同构n维数组对象,其中包含的方法 有效地操作它。NumPy可用于执行各种各样的 数组的数学运算。 它为Python添加了强大的数据结构 它保证了数组和矩阵的高效计算 一个巨大的高级数学函数库 数组和矩阵。

二·Numpy简单使用

1.创建数组

        数组是NumPy库的中心数据结构。数组是值的网格,它包含有关原始数据、如何定位元素以及如何解释元素的信息。它有一个元素网格,可以以各种方式进行索引。所有元素都是相同的类型,称为数组dtype。 数组可以由非负整数的元组、布尔值、另一个数组或整数索引。数组的秩是维数。数组的形状是一个整数元组,给出了数组沿着每个维度的大小。 我们可以初始化NumPy数组的一种方法是从Python列表中使用嵌套列表来处理二维或更高维的数据。

        我们可以用以下方法创建数组:

1.将python序列转换为NumPy数组

  • 数字列表将创建1D阵列
  • 列表套列表将创建2D阵列
  • 进一步嵌套的列表将创建更高维的数组。
import numpy as np
a1D = np.array([1,2,3])
a2D = np.array([[1,2,3],[4,5,6]])
a3D = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])

2.内部NumPy数组创建函数

1.1D阵列创建

        可以利用numpy.linspace和numpy.arange创建1D阵列,通常需要传入两个参数,start和stop.

numpy.arange将创建具有定期递增值的数组。

>>>import numpy as np
>>>np.arange(3)
array([0, 1, 2])
>>>np.arange(1, 4, dtype=int)
array([1, 2, 3])
>>>np.arange(1, 3, 0.5)
array([1, 1.5, 2, 2.5])

        numpy.linspace将创建具有指定数量元素的数组,并在指定开始值和结束值之间等间隔。

>>>import numpy as np
>>>np.linspace(1, 4, 5)
array([1.  , 1.75, 2.5 , 3.25, 4.  ])

此创建函数的优点是可以保证元素的数量以及起点和终点,numpy.arange(start, stop, step)将不包括stop。

2.2D阵列创建

        可以运用numpy.eye,numpy.diag,numpy.vander定义表示为2D数组的特殊矩阵的属性。

numpy.eye(n, m)定义2D单位矩阵。i=j(行索引与列索引相等)的元素为1,其余元素为0:

>>>import numpy as np
>>>np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>>np.eye(3,4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]])

        numpy.diag可以定义具有沿着对角线的给定值的正方形2D数组,或者如果给定2D数组,则返回仅为对角线元素的1D数组:

>>>import numpy as np
>>>np.diag([1, 2, 3])
array([[1, 0, 0],
       [0, 2, 0],
       [0, 0, 3]])
>>>np.diag([1, 2, 3], -1)
array([[0, 0, 0, 0],
       [1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0]])
>>>np.diag([1, 2, 3], 1)
array([[0, 1, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 3],
       [0, 0, 0, 0]])
>>>np.diag([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array([1, 5, 9])

        vabder(x, n)将Vandermonde矩阵定义为2D NumPy数组。范德蒙矩阵的每一列是输入1D数组或列表或元组x的递减幂,其中最高多项式阶数是n-1。此数组创建例程有助于生成线性最小二乘模型,如下所示:

>>>import numpy as np
>>>np.vander([1, 2, 3], 3)
array([[1, 1, 1],
       [4, 2, 1],
       [9, 3, 1]])
>>>np.vander(np.linspace(0, 2, 4), 2)
array([[0.        , 1.        ],
       [0.66666667, 1.        ],
       [1.33333333, 1.        ],
       [2.        , 1.        ]])

3.一般ndarray创建函数

        numpy.ones 将创建一个数组,数组中每个元素都是1。

>>>import numpy as np
>>>np.ones(3)
array([1., 1., 1.])
>>>np.ones((3, 3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

        numpy.zeros 将创建一个填充有0值且具有指定形状的数组。默认的dtype是float64:

>>>import numpy as np
>>>np.zeros(3)
array([0., 0., 0.])
>>>np.zeros((3, 2))
array([[0., 0.],
       [0., 0.],
       [0., 0.]])

        default_rng的random方法将创建一个数组,其中填充了0到1之间的随机值。它包含在numpy.random库中.

>>>from numpy.random import default_rng
>>>default_rng(42).random((3, 2))
array([[0.77395605, 0.43887844],
       [0.85859792, 0.69736803],
       [0.09417735, 0.97562235]])

2.复制、连接或更改现有阵列

1.复制数组

        当将一个数组或它的元素赋值给一个新变量时,必须显式地numpy.copy数组,否则变量就是原始数组的视图。请考虑以下示例:

>>>import numpy as np
>>>a = np.array([1, 2, 3, 4])
>>>b = a[:2]
>>>b += 1
>>>print(f'a = {a}; b = {b}')
a = [2 3 3 4]; b = [2 3]
>>>c = a[:2].copy()
>>>c += 1
>>>print(f'a = {a}; c = {c}')
a = [1 2 3 4]; c = [2 3]

2.连接数组

        可以运用numpy.vstack、numpy.hstack和numpy.block连接现有数组:

>>>import numpy as np
>>>a = np.array([1, 2, 3])
>>>b = np.array([4, 5, 6])
>>>np.hstack((a, b))
array([[1, 2, 3],
      [4, 5, 6]])
>>>a1 = np.array([[1], [2], [3]])
>>>b1 = np.array([[4], [5], [6]])
>>>np.vstack((a1, b1))
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])
>>>A = np.ones((2, 2))
>>>B = np.eye((2, 2))
>>>C = np.zeros((2, 2))
>>>D = np.diag((-1, -1))
>>>np.block([[A, B], [C, D]])
array([[ 1.,  1.,  1.,  0.],
       [ 1.,  1.,  0.,  1.],
       [ 0.,  0., -3.,  0.],
       [ 0.,  0.,  0., -4.]])

3.给数组添加行或列

>>>import numpy as np
>>>a = np.array([[1, 2, 3], [4, 5, 6]])
>>>a
array([[1, 2, 3],
       [4, 5, 6]])

        现在要给数组a添加一行[7, 8, 9],或者添加一列[7, 8]

# numpy.r_添加行,注意维度
>>>np.r_[a, [[7, 8, 9]]]
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

# numpy.c_添加列
>>>np.c_[a, [7, 8]]
array([[1, 2, 3, 7],
       [4, 5, 6, 8]])


# numpy.append() 添加行
>>>np.append(a,[[7, 8, 9]], axis=0)
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

# numpy.append() 添加列,注意添加的数组格式
>>>np.append(a, [[7], [8]])
array([[1, 2, 3, 7],
       [4, 5, 6, 8]])

# 注意在使用numpy.append()添加行或列时一定要加上axis,否则数组就变成一维了
>>>np.append(a, [[7, 8, 9]])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])


# 使用numpy.insert() 添加行
>>>np.insert(a, 1, [[7, 8, 9]], axis=0)
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6]])

# numpy.insert() 添加列
>>>np.insert(a, -1, [7, 8], axis=1)
array([[1, 2, 7, 3],
       [4, 5, 8, 6]])

# 注意在使用numpy.insert()给数组添加行或列时axis也必须要写,否则得到一维数组;
# 第二个参数为插入的索引位置,当插入位置为-1时实际插入位置为倒数第二个,若要插入到最后的位置可将a.shape[0]作为第二个参数传入

4.对数组进行转置

        代码示例:

>>>import numpy as np
>>>a = np.array([[1, 2, 3], [4, 5, 6]])
>>>a
array([[1, 2, 3],
       [4, 5, 6]])
>>>a.T
array([[1, 4],
       [2, 5],
       [3, 6]])

        对于一维数组上述方法对此无用,但多数情况下对一维数组不必进行转置。

三·参考文献

[1] NumPy documentation — NumPy v1.24 Manual

[2] 给numpy数组添加行或列的几种方法_numpy 添加行_景韦的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值