Numpy了解
  UNuPHgwhIFEs 2023年11月09日 18 0

array对象的背景:

  • Numpy的核心数据结构,就叫做array就是数组,array对象可以是一维数组,也可以是多维数组;
  • Python的List也可以实现相同的功能,但是array比List的优点在于性能好、包含数组元数据信息、大量的便捷函数;
  • Numpy成为事实上的Scipy、Pandas、Scikit-Learn、Tensorflow、PaddlePaddle等框架的“通用底层语言”
  • Numpy的array和Python的List的一个区别,是它元素必须都是同一种数据类型,比如都是数字int类型,这也是Numpy高性能的一个原因;

array本身的属性:

  • shape:返回一个元祖,表示array的维度
    对于一维数组返回:(n,) 表示这个数组有多少个元素
    对于多维数组返回:(n,m)表示这个数组是n维数组,每个数组中m个元素
  • ndim:一个数字,表示array的维度的数目
  • size:一个数字,表示array中所有数据元素的个数
  • dtype:array中元素的数据类型

创建array的方法

  • 从Python的列表List和嵌套列表创建array
  • 使用预定函数arange、ones/ones_like、zeros/zeros_like、empty/empty_like、full/full_like、eye等函数创建
  • 生成随机数的np.random模块构建

array本身支持的大量操作和函数

  • 直接逐元素的加减乘除等算数操作
  • 更好用的面向多维的数组索引
  • 求sum/mean等聚合函数
  • 线性代数函数,比如求解逆矩阵、求解方程组

1.使用Python的List和嵌套List创建一维的array和二维的array

# 首先倒入numpy包
import numpy as np

# 创建一个一维数组,也就是Python的单元素List
>>> x = np.array([1,2,3,4,5,6,7,8])
>>> x
array([1, 2, 3, 4, 5, 6, 7, 8]) 

# 创建一个二维数组,也就是Python的嵌套List
>>> Y = np.array([[1,2,3,4],[5,6,7,8]])
>>> Y
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])


2.探索数组array的属性

X.shape
>>> X.shape
(8,)
>>> Y.shape
(2, 4)

#数组维度
X.ndim
>>> X.ndim
1
>>> Y.ndim
2

# 数组元素个数
X.size
>>> X.size
8
>>> Y.size
8

#数组中元素类型
X.dtype
>>> X.dtype
dtype('int64')


3.创建array的便捷函数

arange(n) #创建n个元素的数组
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

arange(n,m,z) # 创建一个开始为n,截至m(不包含),步长为z的数组
>>> np.arange(2,10,2)
array([2, 4, 6, 8])


4.使用ones创建全是1的数组

np.ones(shape, dtype=None, order='C')

shape : int or tuple of ints Shape of the new array, e.g., (2, 3) or 2.
  • shape:表示创建数组的维度
    例: np.ones(2) 代表创建一个元素全是1的一维数组
np.ones((2,3))代表创建一个元素全是1的两行三列的二维数组
  • dtype:表示创建数组的类型
  • order:自行百度
>>> np.ones(2)
array([1., 1.])
>>> np.ones(2,dtype='int32')
array([1, 1], dtype=int32)

>>> np.ones((2,3))
array([[1., 1., 1.],
       [1., 1., 1.]])
>>> np.ones((2,3),dtype='int32')
array([[1, 1, 1],
       [1, 1, 1]], dtype=int32)


5.使用ones_like创建形状相同的数组

ones_like(a, dtype=float, order='C')

  • a表示其他array,可以创建一个维度、元素个数与其他数组但元素为1的数组
>>> a=np.array([1,2,3,4,5,6])
>>> a
array([1, 2, 3, 4, 5, 6])

>>> np.ones_like(a)
array([1, 1, 1, 1, 1, 1])

6.使用zeros创建全是0的数组 np.zeros(shape, dtype=None, order='C')

与ones类似

>>> np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

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

7.使用zeros_like创建形状相同的数组 np.zeros_like(a, dtype=None)

与ones_like类似,无例子

8.使用empty创建全是0的数组 empty(shape, dtype=float, order='C') 注意:数据是未初始化的,里面的值可能是随机值不要用

>>> np.empty(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

>>> np.empty((2,4))
array([[4.9e-324, 9.9e-324, 1.5e-323, 2.0e-323],
       [2.5e-323, 3.0e-323, 3.5e-323, 4.0e-323]])

9.使用empty_like创建形状相同的数组 empty_like(prototype, dtype=None)

10.使用full创建指定值的数组

np.full(shape, fill_value, dtype=None, order='C')

>>> np.full(10, 666)
array([666, 666, 666, 666, 666, 666, 666, 666, 666, 666])

>>> np.full((2,4), 333)
array([[333, 333, 333, 333],
       [333, 333, 333, 333]])

11.使用full_like创建形状相同的数组 np.full_like(a, fill_value, dtype=None)

12.使用random模块生成随机数的数组 randn(d0, d1, ..., dn)

>>> np.random.randn()
-1.5239105618778928
>>> np.random.randn(3)
array([ 1.91306971, -0.83631081,  0.13392882])
>>> np.random.randn(3, 2)
array([[ 0.95252595,  1.22454571],
       [-1.31526104,  1.54766744],
       [ 0.58215357, -0.97539854]])
>>> np.random.randn(3, 2, 4)
array([[[ 0.78597989, -0.50458791, -0.85460351, -0.8550491 ],
        [ 0.57271511,  1.35345563, -0.25623727,  0.22418455]],

       [[ 0.95776224, -0.12411581, -1.21367862, -0.1924964 ],
        [ 0.58215031, -0.0259342 , -0.98172368, -0.02095739]],

       [[-1.97788288,  1.07953885,  0.32801271,  0.09319918],
        [ 0.86101596,  1.83549607, -2.30650547, -1.24515556]]])

13.array本身支持的大量操作和函数 这些操作如果用Python实现需要写很多for循环,用numpy数组很容易

#数组维度转换
#一维数组转为二维数组
>>> A = np.arange(10).reshape(2,5)
>>> A
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
# 所有元素加一
>>> A+1
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])
       
>>>np.sin(A)
>>>np.exp(A)

>>> B = np.random.randn(2,5)
>>> B
array([[-0.78117555, -1.02847184,  0.12548512,  1.36250615,  0.69616677],
       [-0.480137  ,  0.76012895,  0.49491506,  0.20657476,  0.66638048]])
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月09日 0

暂无评论

推荐阅读
  KmYlqcgEuC3l   2天前   6   0   0 Python