import numpy as np_【科学计算工具一】初识Numpy

import numpy as np_【科学计算工具一】初识Numpy_第1张图片

Python生态系统为数据分析师和数据科学家提供了多种数据库,其中NumpyPandas是非常重要的两个库,我们的很多数据处理及分析方法就源于其中。

Numpy:这是一个通用程序库,不仅支持常用的数值数组,同时提供了用于高效处理这些数组的函数。


基础篇

Numpy数组是一个多维数组对象,称为ndarray。

要使用Numpy进行数据分析,首先载入numpy包。因为它是第三方工具,所以每次使用前必须在代码中载入。import 包 as 别名 。(别名常用np,这是numpy约定俗成的简写。)

# 导入numpy包
import numpy as np
  • (一) 创建数组

使用numpy中的array()函数,新手要记住加np。将系统自带的列表list转换成了numpy中的数组。

import numpy as np_【科学计算工具一】初识Numpy_第2张图片

除了利用列表创建numpy中的数组,还有其他方式:

# 创建数组:array()函数,括号内可以是列表、元祖、数组、生成器等

  • (二) 数组属性

## 数组的轴数

在Numpy中维度(dimensions)叫做轴(axes),轴的个数叫做秩。

用 ndarray.ndim 查询

ar1 = np.array([1, 2, 3, 4, 5]) 

ar2 = np.array([[ 1, 2, 3, 4, 5 ],       
                [ 6, 7, 8, 9, 10 ]])
print(ar1.ndim)
print(ar2.ndim)


输出结果:
1
2

上面案例中,ar1是一个一维数组,轴只有1个,也可以说是秩为1;而ar2 是一个二维数组,有2个轴,所以可以说是秩为2。

## 数组的维度

对于n行m列的数组,shape为(n,m)

用 ndarray.shape 查询

ar1 = np.array([1, 2, 3, 4, 5]) 

ar2 = np.array([[ 1, 2, 3, 4, 5 ],       
                [ 6, 7, 8, 9, 10 ]])  
print(ar1.shape)
print(ar2.shape) 


输出结果: 
(5,)
(2, 5)

## 数组的元素总数

对于n行m列的数组,元素总数为n*m

用 ndarray.size 查询

ar1 = np.array([1, 2, 3, 4, 5]) 

ar2 = np.array([[ 1, 2, 3, 4, 5 ],       
                [ 6, 7, 8, 9, 10 ]])  
print(ar1.size)
print(ar2.size) 

 
输出结果: 
5
10

## 数组的元素类型

数组中元素的类型,类似type()(注意了,type()是函数,.dtype是方法)

用 ndarray.dtype 查询

ar1 = np.array([1., 2., 3., 4., 5.]) 

ar2 = np.array([[ 1, 2, 3, 4, 5 ],       
                [ 6, 7, 8, 9, 10 ]])  
print(ar1.dtype)
print(ar2.dtype) 


输出结果: 
float64
int32

进阶篇

这里介绍一下Numpy常用的通用函数,基本运算以及索引,切片等。

【通用函数篇】

## 数组形状

ndarray.T / ndarray.reshape() / ndarray.resize()

# ndarray.T 方法:转置,如原shape为(3,4),转置结果为(4,3) → 所以一维数组转置后结果不变

## 数据类型转变

ndarray.astype(),实际处理项目时,需要利用函数转为可以计算的数据类型

ar1 

## 数组的复制

ndarray.copy()

# copy方法生成数组及其数据的完整拷贝
ar1 = np.arange(10)
ar2 = ar1
print(ar2 is ar1)


输出结果:
True

————————————————————————————————————————————————
ar1[2] = 9
print(ar1,ar2)


输出结果:
[0 1 9 3 4 5 6 7 8 9] 
[0 1 9 3 4 5 6 7 8 9]


————————————————————————————————————————————————
ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)


输出结果:
False
[9 1 9 3 4 5 6 7 8 9] 
[0 1 9 3 4 5 6 7 8 9]

【基本运算篇】

# 与标量的运算
ar = np.arange(6).reshape(2,3)
print(ar)
print(ar + 10)     # 加法
print(ar * 2)      # 乘法
print(1 / (ar+1))  # 除法


输出结果:
[[0 1 2]
 [3 4 5]]

[[10 11 12]
 [13 14 15]]

[[ 0  2  4]
 [ 6  8 10]]

[[ 1.       0.5       0.33333333]
 [ 0.25     0.2       0.16666667]]

————————————————————————————————————————————————
print(ar.mean())  # 求平均值
print(ar.max())  # 求最大值
print(ar.min())  # 求最小值
print(ar.std())  # 求标准差
print(ar.var())  # 求方差


输出结果:
2.5
5
0
1.70782512766
2.91666666667

————————————————————————————————————————————————
print(ar.sum())             # 求和,np.sum() →默认 axis为1,按行求和      
print(ar.sum(axis = 0))     # 求和,np.sum() →修改 axis为0,按列求和
print(np.sort(np.array([1,4,3,2,5,6])))  # 排序


输出结果:
15
[3 5 7]
[1 2 3 4 5 6]

【索引,切片篇】

核心:基本索引及切片 / 布尔型索引及切片

## 基本索引,切片, ndarray数组的下标索引是从0开始

# 一维数组索引,切片

ar = np.arange(10)
print(ar)
print(ar[4])
print(ar[3:6])   # 和之前学习的列表等容器索引相容,左闭右开


输出结果:
[ 0  1  2  3  4  5  6  7  8  9 ]
4
[ 3  4  5 ]
#  二维数组索引及切片

ar = np.arange(16).reshape(4,4)
print(ar, '数组轴数为%i' %ar.ndim)   # 4*4的数组


# 输出结果:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]  数组轴数为2

————————————————————————————————————————————————
print(ar[2])              # 二维数组,索引从行开始切,得到整行数据
print(ar[2][1])           # 二次索引,得到一维数组中的一个值
print(ar[2,1])            # 切片数组中的第三行第三列 → 10



# 输出结果:
[ 8  9  10  11]

9
9


——————————————————————————————————————————————————
print(ar[1:3])            # 切片为两个一维数组组成的二维数组
print(ar[:2,1:])          # 切片数组中的1,2行、2,3,4列 → 二维数组


输出结果:
[[ 4  5  6  7]
 [ 8  9 10 11]]

[[1 2 3]
 [5 6 7]]

## 布尔型索引及切片

# 布尔型索引,以布尔型的矩阵去做筛选

ar = np.arange(12).reshape(3,4)
i = np.array([True,False,True])
j = np.array([True,True,False,False])
print(ar)
print(i)
print(j)


输出结果:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[ True  False  True]

[ True  True  False  False]


—————————————————————————————————————————————————

print(ar[i,:])  # 在第一维度做判断,只保留True的部分
print(ar[:,j])  # 在第二维度做判断,只保留True的部分


输出结果:
[[ 0  1  2  3]
 [ 8  9 10 11]]

[[0 1]
 [4 5]
 [8 9]]

## 数组索引及切片的值更改、复制

# 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组
ar = np.arange(10)
print('改之前的数组ar:', ar)

ar[5] = 100
ar[7:9] = 200
print('改之后的数组ar:', ar)


输出结果:
改之前的数组ar: [ 0 1 2 3 4 5 6 7 8 9 ]
改之后的数组ar: [ 0  1  2  3  4 100  6  200  200  9 ]


——————————————————————————————————————————————————
# 数组复制,处理项目时,避免对原数据进行处理而是在复制版本上处理

ar = np.arange(10)
b = ar.copy()
b[7:9] = 200
print(ar)
print(b)


# 输出结果:
[0 1 2 3 4 5 6 7 8 9]
[ 0  1  2  3  4  5  6  200  200  9 ]
#在复制版本上修改,并不改变原数据

Numpy初级入门需要了解的部分已经差不多啦,如果想更深入的应用,还是用实战解决吧!下一章,将会讲解Pandas初级入门需要了解的知识哦~。

你可能感兴趣的:(import,numpy,as,np,numpy,求秩)