NumPy数组与矩阵(一)


前言

NumPy是python语言的一个扩展程序库,支持大量的维度数组和矩阵运算,此外也针对数组运算提供了大量的的数学函数库。NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象ndarray;
  • 广播功能函数;
  • 整合C/C++/Fortran代码的工具;
  • 线性代数、傅里叶变换、随机数生成等功能;
import numpy as np #使用时要先导入库

一、ndarray对象

ndarray内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针;
  • 数据类型或的(type),描述在数组中的固定大小值的格子;
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组;
  • 一个跨度单元(stride),其中的整数值得是为了前进到当前维度的下一个需要‘跨过’的字节数;
numpy.array(object,
dtype=None,
copy=True,
order=None,
subok=False,
ndmin=0)
a = np.array([1,2,3,4,5])
返回:array([1, 2, 3, 4, 5])
data = [[1,2,3,4,5],[1,2,3,4,5]]
b = np.array(data)
b.ndim
返回值:
array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5]])
2

NumPy支持的数据类型比Python内置的类型要多很多,其中部分类型对应为Python内置的类型。

a = np.array([1,2,3,4,5])
a.dtype
返回:dtype('int32')

ndarray对象属性:

属性说明
ndarray.ndim秩,即轴的数量或维度的数量
ndarray.shape数组的维度,对于矩阵,n行m列
ndarray.size数组元素的总个数,相当于shape中n*m
ndarray. dtypendarray对象中每个元素的大小,以字节为单位
ndarray.itemsizendarray对象中每个元素的大小,以字节为单位
ndarray.flagsndarray对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagndarray的虚部
ndarray.data包含实际数组元素的缓冲去,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
a = np.arange(25, dtype=np.float_).reshape(5,5)
b = np.array([1,2,3,4,5])

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、创建数组

1. 0元素数组

np.zeros(shape, dtype=float, order='C')
e = np.zeros(5)
返回值:array([0., 0., 0., 0., 0.])

2. 1元素数组

s1 = np.ones(5)
s2 = np.ones([5,5], dtype=float)
返回值:
array([1., 1., 1., 1., 1.])
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

3. arange函数

numpy.arange(start, stop, step, dtype)
arr1 = np.arange(10)
arr2 = np.arange(-10, 10, 2)
arr3 = np.arange(-10, 10, 2, dtype=float)
返回值:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([-10,  -8,  -6,  -4,  -2,   0,   2,   4,   6,   8])
array([-10.,  -8.,  -6.,  -4.,  -2.,   0.,   2.,   4.,   6.,   8.])

4. 等差数列数组

numpy.linspace(start, 
stop, 
num=, 
endpoint=True, 
retstep=False, 
dtype=None)
a1 = np.linspace(1, 5, 6)
a2 = np.linspace(0, 5, 6, endpoint=False)
返回值:
array([1. , 1.8, 2.6, 3.4, 4.2, 5. ])
array([0., 0.83333333, 1.66666667, 2.5, 3.33333333, 4.16666667])

5. 等比数列数组

numpy.logspace(start, 
stop, 
num=, 
endpoint=True, 
base=, 
dtype=None)
a = np.logspace(1,10,10,base=2)
返回值:
array([2.,    4.,    8.,   16.,   32.,   64.,  128.,  256.,  512.,  1024.])

三、数据索引与切片

1. 索引

在一维数组中,我们可以通过中括号指定索引获取第i个值(从0开始计数)。
如果想要同时选择多个项,可以在方括号中传递索引数组,比如u我们获取数组a的第2个和第5个元素,则为a[[1, 4]]。

a = np.random.randn(6)
a[2]
a[-1]
a[[1, 4]]
返回值:
array([-0.14606223, -0.17107517,  0.69222811,  0.86525335, -0.45140777, 1.02867372])
0.6922281089515185
1.0286737226055331
array([-0.17107517, -0.45140777])

对于二维数组,则被表示为行和列组成的矩形数组,由两个轴定义,其中轴0由行表示,轴1由列表示。[行索引, 列索引]

b = np.random.randint(5, size=(2, 4))
b[0,0]
b[1,2]
返回值:
array([[1, 3, 4, 0],
       [3, 3, 2, 4]])
 1
 2

2. 切片

a[start:stop:step]
c = np.arange(10)
c[1:6]
d = np.random.randn(16).reshape(4,4)
d[0,:] #获取第一行
d[:,0] #获取第一列
d[1:3,1:3] #获取第2行至第3行,以及第2列至第3列的矩阵元素
d[[1,3],1:3] #可以指定索引数组(行或列的索引不是连续的)
返回值:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([1, 2, 3, 4, 5])
array([[ 0.28468914,  0.12029439, -1.36153591, -0.70530678],
       [ 1.11107553,  0.66395088,  0.07381654,  0.13541892],
       [-0.34753157, -0.45256391,  0.16406101,  0.53094758],
       [ 0.56547094, -0.82115474,  1.59996863,  0.38750278]])
array([ 0.28468914,  0.12029439, -1.36153591, -0.70530678])
array([ 0.28468914,  1.11107553, -0.34753157,  0.56547094])
array([[ 0.66395088,  0.07381654],
       [-0.45256391,  0.16406101]])
array([[ 0.66395088,  0.07381654],
       [-0.82115474,  1.59996863]])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值