Numpy库自学笔记(一、数组的属性与创建)

Numpy库自学笔记(一、数组的属性与创建)

本笔记内容源于北京某大学课程课件、Numpy官方文档

Numpy简介

NumPy( Numerical Python)是基于Python语言的一种开源的科学数值计算的第三方库,拥有高效的、节约空间的多维数组对象——ndarray以及为基于数据的计算提供大量的标准数学函数,提供线性代数、傅里叶变换、随机数生成等高级数学功能,并且提供C\C++\Fortran等语言的接口支持,便于研究。

#例子:用列表和NumPy中的数组分别计算c=a+b,可以看出利用Numpy计算更加快捷1
a1= [[1,2,3],[2,3,4]]
b1= [[6,4,10],[4,6,15]]
c1= [[0,0,0],[0,0,0]]
for i in range(2):
    for j in range(3):
        c1[i][j] = a1[i][j]+b1[i][j]
c1
[[7, 6, 13], [6, 9, 19]]
import numpy as np
a= np.array([[1,2,3],[2,3,4]])
b= np.array([[6,4,10],[4,6,15]])
c=a+b
c
array([[ 7,  6, 13],
       [ 6,  9, 19]])

Ndarray数组的属性与创建

ndarray中的nd代表n维, ndarray代表n维数组对象,通过下面的方法进行创建。虽然ndarray(n维数组)很多调用的方法与list(列表)类似,但本质上二者不同,不过可以相互转换

import numpy as np
np.array(object, dtype = None, order = None)
array(<class 'object'>, dtype=object)
  1. object通常是一个容器或迭代器,将其内容包装成一个ndarray对象
  2. dtype如果不指定,自动从实际数据中推断
  3. order:数据在内存中的排列规则,'C’为行方向(默认),'F’为列方向,这会在下文解释

数组的属性

一些检查数组属性的函数

  • ndim:返回 int。表示数组的维数
  • shape:返回 tuple。表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m)
  • size:返回 int。表示数组的元素总数,等于数组形状的乘积
  • dtype:返回 data-type。描述数组中元素的类型
  • itemsize:返回 int。表示数组的每个元素的大小(以字节为单位)

下面三个图体现出数组具有的三个属性,即数组的维度ndim数组的形状shape轴(axis): 标识数据的维度
一维数组为线性,从左到右看
二维数组有axis0、axis1两个轴,先读取行的数据,可见axis0有两个元素[a,b],即a对应第一行,b对应第二行a=[5.2,3.0,4.5],b=[9.1,0.1,0.3],后读取列的数据,即将二维数组拆分为多行并在一起的一维线性数组,axis1对应列的元素。当我们要查看第一行第二列的元素时,提取第一行的数据axis[0]=[5.2,3.0,4.5],后提取第2列的数据为3.0
三维数组则由多个二维数组堆叠而成,先按照axis0的方向,进行切片,产生4个二维数组,在按照二维数组读取数据的方法对数据进行读取。

数据类型

Python语法仅支持整数、浮点数和复数3种类型,而NumPy科学计算涉及数据较多,对存储和性能都有较高要求,对元素类型精细定义,这样有助于NumPy合理使用存储空间并优化性能,也有助于程序员对程序规模有合理评估

数据类型
x = np.array([1, 2, 3],dtype="int32")
y = np.array([4.0, 5, 6])
print(x.dtype, x.shape, x.ndim)
print(y.dtype, y.shape, y.ndim)
z = x + y
print(z,z.dtype)
int32 (3,) 1
float64 (3,) 1
[5. 7. 9.] float64

当拥有不同数据类型的数组进行运算时,会默认采用运算数组中的最高精度进行运算

举例创建数组

例子

班级姓名数学分析高等代数概率统计
一班张丽809584
一班王钰908685
二班闵玥928180
二班赵寒837974
#建立一维数组 
np.array([80,95,84])
array([80, 95, 84])
np.array((90.,86.,85.))
array([90., 86., 85.])
np.array(['张丽', '王钰', '闵玥', '赵寒'])#U2 长度为2个Unicode字符, Unicode是计算机字符编码
array(['张丽', '王钰', '闵玥', '赵寒'], dtype='<U2')
#二维数组的建立
np. array([[80, 95, 84], [90, 86, 85]])
array([[80, 95, 84],
       [90, 86, 85]])
#三维数组的建立
example1=np.array([[[80,95,84],[90,86,85]],[[92,81,80],[83,79,74]]])
#先按照班级进行切片,之后按照同学划分,再按照学科种类分列

example1

#当我们要读取一班张丽的概率统计成绩时,如下文所示
example1[0][0][2]
84
#也可以这样对数据进行读取
example1[0,0,2]
84
#看下example的shape、ndim、size
print(example1.shape)
print(example1.ndim)
print(example1.size)
(2, 2, 3)
3
12

使用常见函数创建数组

NumPy 函 数说 明
np.ones(shape)根据shape生成一个全1的数组, shape是列表或元组类型
np.zeros(shape)根据shape生成一个全0的数组, shape是列表或元组类型
np.eye(n,k=0)创建一个n*n单位矩阵, k=0(默认值)表示主对角线,正值表示上对角线,负值表示下对角线
np.full(shape,val)根据shape生成一个数组,每个元素值都是val
np.arange(n)用于创建一个于等差数列,类似range()函数,返回ndarray类型,元素默认从0到n-1,可以指定start, stop, step,用于整数场合
np.linspace(start, stop , n)返回n 个在闭区间 [start, stop] 内均匀分布的数值(start, stop , n)(默认含右侧端点)用于浮点数场合
np.ones_like(a)根据数据a的形状生成一个全1的数组
np.zeros_like(a)根据数组a的形状生成一个全0的数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
np.logspace(start, stop, num=50, base=10.0)用于创建一个于等比数列,num为样本数量,base为l底数
#举例
a=np.zeros((2,2,3))#默认是浮点数
print('a=',a)
b=np.ones_like(a)
print('b=',b)
c=np.full([2,2,3],9)
print('c=',c)
a= [[[0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]]]
b= [[[1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]]]
c= [[[9 9 9]
  [9 9 9]]

 [[9 9 9]
  [9 9 9]]]

np.arange( )

  • 创建一个一维数组
  • 可以传入一个参数、两个参数或三个参数
  • 1个参数: np.arange(n)生成 0 到 n - 1 的连续整数
  • 2个参数: np.arange(start,stop) 生成半开区间 [start, stop) 内步长为1的等差数列
  • 3个参数: np.arange([start,] stop,[step,]), 生成半开区间 [start,stop) 内的等差数列, step为步长
print(np.arange(10))
print(np.arange(2,10))
print(np.arange(1,10,3))
[0 1 2 3 4 5 6 7 8 9]
[2 3 4 5 6 7 8 9]
[1 4 7]

np.linspace( )

  • np.linspace(start, stop, n)
  • 返回n 个在闭区间 [start, stop] 内均匀分布的数值
  • 可以不包含区间的结束点, 半开区间[start, stop),方法是在 np.linspace() 函数中将参数endpoint 设为 False
    一般来说创建非整数间隔的数组,采用np.linspace( ),创建整数间隔的数组采用np.arange( )
print(np.linspace(1, 10, 7))
print(np.linspace(1,10,7,endpoint=False))
[ 1.   2.5  4.   5.5  7.   8.5 10. ]
[1.         2.28571429 3.57142857 4.85714286 6.14285714 7.42857143
 8.71428571]

np.logspace(start, stop, num=50, base=10.0)

  • 返回num个在闭区间 [basestart, basestop] 内按照等比方式均匀分布的数字
print(np.logspace(1, 5, 5))  #从101到105,含5个数
print(np.logspace(1, 10, 10, base=2))  #从21到210,含10个数
[1.e+01 1.e+02 1.e+03 1.e+04 1.e+05]
[   2.    4.    8.   16.   32.   64.  128.  256.  512. 1024.]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值