Numpy库入门

数据的维度

维度:一组数据的组织形式。
一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、数组、集合等概念。

其中
列表和数组:
都是一组数据的有序结构。
二者区别:
列表的数据类型可以不同,数组的数据类型必须相同

二维数据:由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据,其中,表头是二维数据的一部分。例如:列表元素是列表。

多维数据:由一维数据或者二维数据在新维度上扩展形成。

高维数据:仅利用最基本的二元关系展示数据间的复杂结构,利用键值对组织数据。例如:字典。

NumPy的数组对象:ndarray

概述

NumPy是SciPy、Pandas等数据处理或科学计算库的基础。
ndarray是一个多维数组对象,由两部分构成:
1、实际存储的数据
2、描述这些数据的元数据(数据维度、数据类型)。

ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。

轴(axis):保存数据的维度
秩(rank):轴的数量

Numpy的引用

import numpy as np
其中,np 是指引入模块的别名,尽管别名可以省略或更改,建议使用上述约定的别名。如果使用numpy会麻烦,代码变长,倘若使用其它的别名,他人不熟悉,所以numpy就为np

为什么有了列表类型还需要引入N维数组?

(N维数组对象ndarray)
1.数组对象可以去掉元素间运算所需的循环,使得一维向量更像单个数据。
2.设置专门的数组对象,经过优化,可以提升这类应用的运算速度。(numpy底层是C,可以提供高效的运算)
3.观察:科学计算中,一个维度所有数据的类型往往相同,数组对象采用相同的数据类型,有助于节省运算和存储空间。

def pySum():
    a = [0,1,2,3,4]
    b = [5,6,7,8,9]
    c = a + b
    return c
    
print(pySum())


结果如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
def pySum():
    a = [0,1,2,3,4]
    b = [5,6,7,8,9]
    c = []
    for i in range(len(a)):
        c.append(a[i]+b[i])   
    return c

print(pySum())


结果如下:
[5, 7, 9, 11, 13]
import numpy as np
def npSum():
    a = np.array([0,1,2,3,4])
    b = np.array([5,6,7,8,9])
    c = a + b
    return c

print(npSum())


结果如下:
[ 5  7  9 11 13]

ndarray对象的属性

.ndim:秩,即轴的数量或者维度的数量
.shape:ndarray对象的尺度,对于矩阵,n行m列
.size:ndarray对象元素的个数,相当于.shape中n*m的值
.dtype:ndarray对象的元素类型
.itemsize:ndarray对象每个元素的大小,以字节为单位

a = np.array([[1,2,3],[4,5,6]])
#生成的矩阵实际上是这样的:
#						 1 2 3
#						 4 5 6 
a.ndim
2      #有两个维度

a.shape
(2, 3)   #两行三列

a.size    
6     #共有 2*3 = 6 个元素

a.dtype
dtype('int32')    #元素类型是32位整型

a.itemsize
4     #每个元素的大小为4个字节

ndarray的元素类型

ndarray的元素类型

ndarray的元素类型
ndarray的元素类型

ndarray为什么要支持这么多种元素类型呢?

(Python语法仅支持整数、浮点数和复数3种类型)

1.科学计算涉及数据较多,对存储和性能都有较高要求。
2.对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能。
3.对元素类型精细定义,有助于程序员对程序规模有合理评估。

非同质的ndarray对象

ndarray数组可以由非同质对象构成。
非同质ndarray元素为对象类型(dtype = object)。
非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用。

ndarray数组的创建

(一)从Python中的列表、元组等类型创建ndarray数组

x = np.array(list/tuple) 
x = np.array(list/tuple, dtype=np.float32)
#当不指定 dtype 时,NumPy将根据数据情况关联一个dtype类型
x = np.array([0,1,2,3])	#从列表类型创建
print(x)

结果:
[0 1 2 3]
#-----------------------------------------------------
x = np.array((7,8,9,10))	#从元组类型创建
print(x)

结果:
[ 7  8  9 10]
#-----------------------------------------------------
x = np.array([[1,2],[3,4],(5.,6.)])	#从列表和元组混合类型创建
print(x)

结果:
[[1. 2.]
 [3. 4.]
 [5. 6.]]

(二)使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等

np.arange(n) :类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape) :根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) :根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) :根据shape生成一个数组,每个元素值都是val
np.eye(n) :创建一个正方的n*n单位矩阵,对角线为1,其余为0

np.ones_like(a) :根据数组a的形状生成一个全1数组
np.zeros_like(a) :根据数组a的形状生成一个全0数组
np.full_like(a,val) :根据数组a的形状生成一个数组,每个元素值都是val

In [27]:np.arange(10)
Out[27]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#------------------------------------------------------------
In [28]:np.ones((3,6))
Out[28]: 
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
#------------------------------------------------------------
In [29]:np.zeros((5,5),dtype = np.int32)
Out[29]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
#------------------------------------------------------------
In [30]:np.full((3,4),2)
Out[30]: 
array([[2, 2, 2, 2],
       [2, 2, 2, 2],
       [2, 2, 2, 2]])
#------------------------------------------------------------
In [31]:np.eye(5)
Out[31]: 
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值