栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python处理数据之Numpy基础(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python处理数据之Numpy基础(一)

以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大。堪比Matlab啊。果然是人生苦短,我用Python。所以本文作为一个记录&笔记,希望可以帮助大家快速入门Numpy。如果你有Matlab基础,那么你能很快看懂本文!!!(本文长期更新!!!)

什么是Numpy?

Numpy是Python 专门处理高维数组 (high dimensional array) 的计算的包

  • 强大的N维数组对象:ndarray
  • 可以对数组结构数据进行运算(不用遍历循环)
  • 有随机数、线性代数、傅里叶变换等功能
如何安装?

方法一:

pip install numpy

方法二:

安装anaconda
安装anaconda后,numpy是可以直接使用的,无需二次安装

下载地址:https://www.anaconda.com/

正文:

在使用 numpy 之前,需要引进它,语法如下:

import numpy

这样你就可以用 numpy 里面所有的内置方法 (build-in methods) 了,比如求和与均值。

numpy.sum()	
numpy.mean()

但是每次写 numpy 字数有点多,通常我们给 numpy 起个别名 np,用以下语法,这样所有出现 numpy 的地方都可以用 np 替代。

import numpy as np
创建数组
import numpy as np
t1 = np.array([1,2,3])
print(t1)
print(type(t1))

>>>[1 2 3]

除了np.array之外还有其他函数可以创建新数组,这里列出常用的几个:

arange # python range的数组版
asarray # 将输入转换为ndarray
ones # 根据给定的形状和类型生成全1的数组
ones_like # 根据给定的数组生成形状一样的全1的数组
zeros # 根据给定的形状和类型生成全0的数组
zeros_like # 根据给定的数组生成形状一样的全1的数组
eye # 生成一个N*N的特征矩阵(对角线为1,其余为0)

arange 和 range一样 会帮助我们快速的生成一堆数据 只不过这是在numpy里面 生成的是一堆数组

t2 = np.array(range(10))
print(t2)
print(t2.dtype)

>>>[0 1 2 3 4 5 6 7 8 9]
int32


t3 = np.arange(12)
print(t3)

>>>[ 0  1  2  3  4  5  6  7  8  9 10 11]


t4 = np.array([1,1,0,1,0,0],dtype = bool)
print(t5)
print(t5.dtype)

>>>[ True  True False  True False False]
bool
round取小数 第二个参数值表示取几位
t8 = np.round(t7,2)
print(t8)

>>>array([0.2 , 0.9 , 0.2 , 0.94, 0.61, 0.38, 0.27, 0.37, 0.08, 0.8 ])

数组的形状和索引

一维数组:
import numpy as np

t1 = np.arange(12)
print(t1)
>>>array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

print(t1.ndim) # 查看维度系数
>>>1

t1 > 5 #判断数组里面大于5的数,返回值为bool
>>>array([False, False, False, False, False, False,  True,  True,  True,
        True,  True,  True])

boolindex = t1 > 5
t1[boolindex]  # 将大于5的数值拿出
>>>array([ 6,  7,  8,  9, 10, 11])
二维数组:
arr = np.array([[22,54,32],[45,73,83],[86,43,82]])
bidx = arr < 30
print(bidx)
arr[bidx] #布尔值索引
print(arr.ndim) #查看维度数
print(t1.shape) # shape 查看数组的形状
print(arr.shape)

>>>[[ True False False]
 [False False False]
 [False False False]]
2
(12,)
(3, 3)
三维数组:
arr1 = np.array([[[22,54,32],[45,73,83],[86,43,82]],
                [[55,21,63],[21,32,6],[6,43,2]],
                [[45,76,51],[22,356,234],[86,1,98]]
               ])
arr1
print(arr1.ndim)
print(arr1.shape)

>>>3
(3, 3, 3)

reshape(),直接更改数组的形状,但更改前后数组元素个数必须相同

t3 = t4.reshape((3,4))
print(t3)

>>>array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

t5 = np.arange(24).reshape((2,3,4))
t5
# print(t5.shape)

>>>array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

resize()

print(np.resize(np.arange(16),(3,5)))  # resize当后面的数组元素个数小于前面生成的数量时,按照顺序迭代
print(np.resize(np.arange(12),(3,5)))  # resize当后面的数组元素个数大于前面的生成的数量,则随机填充
 
>>>
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11  0  1  2]]
数组的类型转化

**astype()**可以将数组中元素的类型进行转化,在numpy中元素类型有以下几种(太多了就不都写了):

int8, uint8 #有符号和无符号的8整位整数
int16, uint16 #有符号和无符号的16整位整数
int32, uint32 #有符号和无符号的32整位整数
int64, uint64 #有符号和无符号的64整位整数
float16 #半精度
float32 #单精度
float64 #双精度
bool #布尔
.....

举个类型转换的栗子:

ar1 = np.arange(10,dtype=float)
ar2 = ar1.astype(np.int64)
print(ar1,ar2)
 
>>>
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [0 1 2 3 4 5 6 7 8 9]
数组的堆叠

数组的堆叠有hstack(),vstack() 以及 stack(),下面分别举例:

a = np.arange(10)
b = np.arange(10,20)
print(ar1,ar2)
# 横向链接
print(np.hstack((a,b)))
# 竖向链接
a = np.array([[1],[2],[3]])
b = np.array([['a'],['b'],['c']])
print(np.vstack((a,b)))
# 任意堆叠
a = np.arange(10)
b = np.arange(10,20)
print(np.stack((a,b),axis=1)) # 竖向堆叠
print(np.stack((a,b))) # 横向堆叠
 
>>>>
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
[['1']
 ['2']
 ['3']
 ['a']
 ['b']
 ['c']]
[[ 0 10]
 [ 1 11]
 [ 2 12]
 [ 3 13]
 [ 4 14]
 [ 5 15]
 [ 6 16]
 [ 7 17]
 [ 8 18]
 [ 9 19]]
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
数组的拆分

数组拆分同样分为横向拆分和竖向拆分。

# 数组拆分
ar = np.arange(16).reshape(4,4)
print(ar)
print(np.hsplit(ar,2)) #纵向拆分
print(np.vsplit(ar,2)) #横向拆分
 
>>>
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
常用计算函数

这里的计算函数与Python中的计算函数用法相同,这里不再过多论述。

#计算函数
np.mean() #求平均值
np.max() #最大值
np.min() #最小值
np.gtd() #标准差
np.var() #方差
np.sum() # 其中参数axis=0按列求和axis=1按行求和

7️⃣0️⃣7️⃣6️⃣年8️⃣月7️⃣日0️⃣8️⃣点5️⃣分,亲亲数字连起来去Q➕一下,有笔记哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号