美文网首页
numpy学习

numpy学习

作者: 自学java的菜鸟小赵 | 来源:发表于2020-09-24 22:07 被阅读0次

私聊做毕设或者实验课题。

1.介绍

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

2.基本使用

1.首先需要导入numpy包,使用pip install numpy下载安装包,使用dtype转化数据类型

import numpy as np
import random
#数组类型
array = np.array([1, 2, 3])
print(array)
print(type(array))

array2 = np.array(range(10))
print(array2)

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

t4=np.arange(4,8,2)
print(t4)

#numpy里面的数据类型
t5=np.array(range(1,4),dtype="float32")
print(t5)
print(t5.dtype)

t6=np.array([0,1,0,1],dtype="bool")
print(t6)
print(t6.dtype)

#调整数据类型
t7=t6.astype("i8")
print(t7)
print(t7.dtype)

#numpy中的小数
t8=np.array([random.random() for i in range(10)])
print(t8)
print(t8.dtype)

t9 = np.round(t8, 2)
print(t9)

输出

[1 2 3]
<class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[4 6]
[1. 2. 3.]
float32
[False  True False  True]
bool
[0 1 0 1]
int64
[0.81783996 0.4754238  0.62353824 0.26188562 0.64390433 0.44740063
 0.36523649 0.96967843 0.73645357 0.34591022]
float64
[0.82 0.48 0.62 0.26 0.64 0.45 0.37 0.97 0.74 0.35]

2.shape返回的是一个元组类型,分别代表行和列。 reshape修改数据的维度,flatten将二维数组转变成一维数组

import numpy as np

t1=np.arange(12)
print(t1.dtype)
print('t1->****',t1.shape)

#生成多个一维数组
t2=np.array([[1,2,3],[4,5,6]])
print('t2->*****',t2)
#2代表行,3代表列
print('t2.shape->*****',t2.shape)

#修改一维数组变成2维数组
print('t1.reshape->*****',t1.reshape(3,4))

t3=np.arange(24).reshape(2,3,4)
print('t3->*****',t3)

print('t3.reshape->*****',t3.reshape(4,6))


t4=t2.reshape(6,)
print('t4->*****',t4)
#将二维数组变成一维数组
t5=t2.reshape((t2.shape[0]*t2.shape[1]))
print('t5->*****',t5)

#flatten也是将二维数组变成一维数组
t6=t2.flatten()
print('t6->*****',t6)

输出

int32
t1->**** (12,)
t2->***** [[1 2 3]
 [4 5 6]]
t2.shape->***** (2, 3)
t1.reshape->***** [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
t3->***** [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
t3.reshape->***** [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
t4->***** [1 2 3 4 5 6]
t5->***** [1 2 3 4 5 6]
t6->***** [1 2 3 4 5 6]

3.数组的计算

import numpy as np
t1=np.arange(24).reshape(4,6)
print(t1)
print("---*******************-------")
print(t1+2)
print("---*******************-------")
print(t1*2)
print("---*******************-------")
print(t1/2)
print("---*******************-------")
print(t1/0)
print("---*******************-------")
t2=np.arange(100,124).reshape(4,6)
print(t2)
print("---*******************-------")
print(t1+t2)
print("---*******************-------")
print(t1*t2)
print("---*******************-------")
t3=np.arange(0,6)
print(t3)
print(t1-t3)
print("---*******************-------")
t4=np.arange(4).reshape(4,1)
print(t4)
print(t1-t4)

输出

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
---*******************-------
[[ 2  3  4  5  6  7]
 [ 8  9 10 11 12 13]
 [14 15 16 17 18 19]
 [20 21 22 23 24 25]]
---*******************-------
[[ 0  2  4  6  8 10]
 [12 14 16 18 20 22]
 [24 26 28 30 32 34]
 [36 38 40 42 44 46]]
---*******************-------
[[ 0.   0.5  1.   1.5  2.   2.5]
 [ 3.   3.5  4.   4.5  5.   5.5]
 [ 6.   6.5  7.   7.5  8.   8.5]
 [ 9.   9.5 10.  10.5 11.  11.5]]
---*******************-------
[[nan inf inf inf inf inf]
 [inf inf inf inf inf inf]
 [inf inf inf inf inf inf]
 [inf inf inf inf inf inf]]
---*******************-------
[[100 101 102 103 104 105]
 [106 107 108 109 110 111]
 [112 113 114 115 116 117]
 [118 119 120 121 122 123]]
---*******************-------
[[100 102 104 106 108 110]
 [112 114 116 118 120 122]
 [124 126 128 130 132 134]
 [136 138 140 142 144 146]]
---*******************-------
[[   0  101  204  309  416  525]
 [ 636  749  864  981 1100 1221]
 [1344 1469 1596 1725 1856 1989]
 [2124 2261 2400 2541 2684 2829]]
---*******************-------
[0 1 2 3 4 5]
[[ 0  0  0  0  0  0]
 [ 6  6  6  6  6  6]
 [12 12 12 12 12 12]
 [18 18 18 18 18 18]]
---*******************-------
[[0]
 [1]
 [2]
 [3]]
[[ 0  1  2  3  4  5]
 [ 5  6  7  8  9 10]
 [10 11 12 13 14 15]
 [15 16 17 18 19 20]]

4.读取外部数据,delimiter=','指明分割符,dtype,指明数据类型,unpack数据转置,还可以使用transpose(),T(),swapaxes()方法进行转置

import numpy as np
path = './num.txt'
data1 = np.genfromtxt(path,delimiter=',',dtype=int)
data2 = np.genfromtxt(path,delimiter=',',dtype=int,unpack=True)
print(data1)
print(data2)

print(np.shape(data1)[0])
#转置,也可以data1.T
print(data1.transpose())
#转置,将0轴和1轴进行转化
print((data1.swapaxes(1,0)))

输出

[[23  4  5  5]
 [45 23 23 12]
 [12  3  4  1]]
[[23 45 12]
 [ 4 23  3]
 [ 5 23  4]
 [ 5 12  1]]
3
[[23 45 12]
 [ 4 23  3]
 [ 5 23  4]
 [ 5 12  1]]
[[23 45 12]
 [ 4 23  3]
 [ 5 23  4]
 [ 5 12  1]]

5.索引和切片

import  numpy as np

data=np.arange(24).reshape(4,6)

print(data)
print("*"*100)
#取行
print(data[2])
#取联系多行
print(data[2:])

print(data[[0,2,3]])
print("*"*100)
#取列
print(data[1,:])
print(data[2:,0])
print(data[2:,[0,1]])
print(data[2:,1:])
print("*"*100)
#取不相邻的点 代表坐标(0,0),(1,1),(2,2)这个点
print(data[[0,1,2],[0,1,2]])

输出

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
****************************************************************************************************
[12 13 14 15 16 17]
[[12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[[ 0  1  2  3  4  5]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
****************************************************************************************************
[ 6  7  8  9 10 11]
[12 18]
[[12 13]
 [18 19]]
[[13 14 15 16 17]
 [19 20 21 22 23]]
****************************************************************************************************
[ 0  7 14]

6.更多索引操作

import  numpy as np

data=np.arange(24).reshape(4,6)
print(data)
print(data[2:,1:])
print(data<10)
data[data<10]=3
print(data)

data2 = np.where(data<10,0,10)  #if data<10 则赋予10,反之赋予10
print(data2)
print("*"*100)
data3=np.arange(24).reshape(4,6)
data4=data3.clip(10,18) #小于10的替换成10,大于18的替换成18
print(data4)

输出

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[[13 14 15 16 17]
 [19 20 21 22 23]]
[[ True  True  True  True  True  True]
 [ True  True  True  True False False]
 [False False False False False False]
 [False False False False False False]]
[[ 3  3  3  3  3  3]
 [ 3  3  3  3 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[[ 0  0  0  0  0  0]
 [ 0  0  0  0 10 10]
 [10 10 10 10 10 10]
 [10 10 10 10 10 10]]
****************************************************************************************************
[[10 10 10 10 10 10]
 [10 10 10 10 10 11]
 [12 13 14 15 16 17]
 [18 18 18 18 18 18]]

7.数组的拼接

import numpy as np

data1=np.arange(0,12).reshape(2,6)
print(data1)
data2=np.arange(12,24).reshape(2,6)
print(data2)
#竖直拼接
vstack= np.vstack((data1, data2))
print(vstack)
#水平拼接
hstack = np.hstack((data1, data2))
print(hstack)


#数组的行列交换
vstack[[1,2],:]= vstack[[2,1],:]
print(vstack)

#数组的列交换
vstack[:,[1,2]]=vstack[:,[2,1]]
print(vstack)

输出

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
****************************************************************************************************
[[12 13 14 15 16 17]
 [18 19 20 21 22 23]]
****************************************************************************************************
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
****************************************************************************************************
[[ 0  1  2  3  4  5 12 13 14 15 16 17]
 [ 6  7  8  9 10 11 18 19 20 21 22 23]]
****************************************************************************************************
[[ 0  1  2  3  4  5]
 [12 13 14 15 16 17]
 [ 6  7  8  9 10 11]
 [18 19 20 21 22 23]]
****************************************************************************************************
[[ 0  2  1  3  4  5]
 [12 14 13 15 16 17]
 [ 6  8  7  9 10 11]
 [18 20 19 21 22 23]]

8.zeros和ones

import numpy as np

data1=np.arange(0,12).reshape(2,6)
data2=np.arange(12,24).reshape(2,6)

ze=np.zeros((data1.shape[0],1)).astype(int)
one=np.ones((data2.shape[0],1)).astype(int)


hstack1= np.hstack((data1, ze))
hstack2=np.hstack((data2,one))

final_stack=np.vstack((hstack1,hstack2))
print(final_stack)

输出

[[ 0  1  2  3  4  5  0]
 [ 6  7  8  9 10 11  0]
 [12 13 14 15 16 17  1]
 [18 19 20 21 22 23  1]]

9.eye,argmax,argmin

import numpy as np

data=np.arange(0,24).reshape(4,6)

#其他方法
#创建一个全为0的数组
zeros= np.zeros((3,3), dtype=int)
print(zeros)
#创建一个全为1的数组
ones = np.ones((3, 3), dtype=int)
print(ones)

#生成一个对角线为1的方正
eye= np.eye(3,dtype=int)
print(eye)

#获取最大值的位置 axios=0代表竖轴,axios=1代表的是横轴
argmax = np.argmax(data, axis=0)
print(argmax)
#获取最小值的位置
eye[eye==1]=-1
print(eye)

argmin=np.argmin(data,axis=0)
print(argmin )

输出

[[0 0 0]
[0 0 0]
[0 0 0]]
[[1 1 1]
[1 1 1]
[1 1 1]]
[[1 0 0]
[0 1 0]
[0 0 1]]
[3 3 3 3 3 3]
[[-1  0  0]
[ 0 -1  0]
[ 0  0 -1]]
[0 0 0 0 0 0]

10.随机数种子

import numpy as np
#指明一个随机数种子,这里如果指明seed=n,则下面跟seed=n的数组产生的随机数是相同的
np.random.seed(3)
randint = np.random.randint(10, 20, (4, 5))
print(randint)

np.random.seed(3)
randint2 = np.random.randint(10, 20, (4, 5))
print(randint2)

输出

[[18 19 13 18 18]
 [10 15 13 19 19]
 [15 17 16 10 14]
 [17 18 11 16 12]]
[[18 19 13 18 18]
 [10 15 13 19 19]
 [15 17 16 10 14]
 [17 18 11 16 12]]

11.isnan

import numpy as np


def final_num(t1):
    for i in range(t1.shape[1]):
        #得到每一列
       temp_col=t1[:,i]
        #计算数组中nan的数目
       nan_num = np.count_nonzero(np.isnan(temp_col))
       if nan_num !=0:
           #因为连个nan等于false,所以这里统计每一列不为nan的数
           temp=temp_col[temp_col == temp_col]
           #将均值赋值给为nan的数据
           temp_col[np.isnan(temp_col)] = temp.mean()
    return t1

if __name__ == '__main__':
    t1 = np.arange(12).reshape(3, 4).astype("float")
    t1[1, 2:] = np.nan
    print(t1[t1==t1])
    print("*"*100)
    print(final_num(t1))

输出

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

常用的统计函数

求和: t.sum(asix=None)
均值: t.mean(a,asix=None)
中值: np.median(asix=None)
最大值: t.max(asix=None)
最小值: t.min(asix=None)
极值: t.ptp(t,asix=None)
标准差: t.sttd(asix=None)

Pandas 处理非数值型的数据

  • Series 一维,带标签的数组
  • DataFrame 二维,Series容器

1.Series的初步了解

import pandas as pd

ser=pd.Series([1,2,3,4,5,6],index=list("abcdef"))
print(ser)
print("*"*100)
temp_dict={'name':'xiaozhao','age':30,"tel":100}
series = pd.Series(temp_dict)
print(series)
print("*"*100)
print(series['age'])
print(series[0])
print("*"*100)
print(series[['age','tel']])
print("*"*100)
print(list(series.index))
print(series.values)

输出

a    1
b    2
c    3
d    4
e    5
f    6
dtype: int64
****************************************************************************************************
name    xiaozhao
age           30
tel          100
dtype: object
****************************************************************************************************
30
xiaozhao
****************************************************************************************************
age     30
tel    100
dtype: object
****************************************************************************************************
['name', 'age', 'tel']
['xiaozhao' 30 100]

2.读取外部数据并连接数据库

'''都取外部数据'''
import pandas as pd
import pymysql

df= pd.read_csv("dog.txt")
print(df)

conn = pymysql.connect(host='localhost', port=3306,
                           user='root', password='123',
                           db='db01', charset='utf8',cursorclass=pymysql.cursors.DictCursor)
str='select * from dept'
db=pd.read_sql(str,conn)
print(db)

输出

     名字  年龄
0  aaa   11
1  bbb   12
2  ccc   13
   deptno dname db_source
0       1   开发部      db01
1       2   研发部      db01
2       3   生产部      db01
3       4   技术部      db01

3.更多操作

import pandas as pd
import numpy as np

data = pd.DataFrame(np.arange(12).reshape(3,4),index=list("123"),columns=list("abcd"))
print(data.head(1))
print(data.info) #z展示dataForm里面的数据信息
print(data.describe()) #展示数据的统计信息
print(data.sort_values(by='c',ascending=False)) #by通过哪个属性进行排序,ascending=True,表示升序
print("*"*100)
print(data.loc['1']['a']) #根据标签索引获取数据
print(data.iloc[1][2]) #根据位置获取数据,这里是第2行第3列,所以显示6
print("*"*100)
#读取一行
print(data[:1])
#读取多行
print(data.iloc[[1,2]])
#读取多列
print(data[['a','b']])
print(np.array(data[1:]).flatten())
data.loc[4]=[1,2,3,4]
print('增加行\n',data)
data['e']=[1,2,3,4]
print('增加列\n',data)
print("*"*100)
#读取列,可以直接指明列的索引值
print(data['b'])
print("*"*100)
print(data[1:]['c'])
print('data.index->******',list(data.index))
print("*"*100)
data2=[{"name":'zhangsan','age':12},{'age':12,'tel':113},{"name":'zhangsan','age':12,'tel':113}]
data2_dataframe=pd.DataFrame(data2)
print(data2_dataframe)

print("*"*100)
mean = data2_dataframe['tel'].mean()
print(mean)
#这里mean如果不知名列会自动计算当前数据列的平均值,也可以指明列名如data2_dataframe['tel'].mean()
data2_dataframe=data2_dataframe.fillna(data2_dataframe.mean())
print(data2_dataframe)


print("*"*100)
data3=[[1,2,3],[4,5,6],[1,2,3],[2,3,4]]
data4=np.array(data3)
print(type(data4))
array = np.array(data3).flatten()
print(set(array))

输出

  a  b  c  d
1  0  1  2  3
<bound method DataFrame.info of    a  b   c   d
1  0  1   2   3
2  4  5   6   7
3  8  9  10  11>
         a    b     c     d
count  3.0  3.0   3.0   3.0
mean   4.0  5.0   6.0   7.0
std    4.0  4.0   4.0   4.0
min    0.0  1.0   2.0   3.0
25%    2.0  3.0   4.0   5.0
50%    4.0  5.0   6.0   7.0
75%    6.0  7.0   8.0   9.0
max    8.0  9.0  10.0  11.0
   a  b   c   d
3  8  9  10  11
2  4  5   6   7
1  0  1   2   3
****************************************************************************************************
0
6
****************************************************************************************************
   a  b  c  d
1  0  1  2  3
   a  b   c   d
2  4  5   6   7
3  8  9  10  11
   a  b
1  0  1
2  4  5
3  8  9
[ 4  5  6  7  8  9 10 11]
增加行
    a  b   c   d
1  0  1   2   3
2  4  5   6   7
3  8  9  10  11
4  1  2   3   4
增加列
    a  b   c   d  e
1  0  1   2   3  1
2  4  5   6   7  2
3  8  9  10  11  3
4  1  2   3   4  4
****************************************************************************************************
1    1
2    5
3    9
4    2
Name: b, dtype: int64
****************************************************************************************************
2     6
3    10
4     3
Name: c, dtype: int64
data.index->****** ['1', '2', '3', 4]
****************************************************************************************************
       name  age    tel
0  zhangsan   12    NaN
1       NaN   12  113.0
2  zhangsan   12  113.0
****************************************************************************************************
113.0
       name  age    tel
0  zhangsan   12  113.0
1       NaN   12  113.0
2  zhangsan   12  113.0
****************************************************************************************************
<class 'numpy.ndarray'>
{1, 2, 3, 4, 5, 6}


相关文章

  • numpy 学习(待更新)

    numpy 学习 标签(空格分隔): 机器学习 Numpy 入门 一、安装 pip install numpyor...

  • Numpy 学习图谱

    在学习 Numpy 的时候,整理了一份 Numpy 学习图谱,希望同样可以帮助到想要入门 Numpy 的朋友。 N...

  • Python-03 ~ 机器学习库 之 NumPy

    NumPy是机器学习中最常用的计算科学库,今天就来看看吧 NumPy简单介绍 NumPy的简单介绍:NumPy是机...

  • Numpy学习笔记

    Numpy学习笔记 Numpy基础 Numpy的数组类也叫ndarray,也就是大家所熟悉的array;ndarr...

  • 机器学习之numpy和matplotlib学习(十一)

    今天继续来学习numpy。学习有关复数矩阵在numpy中的创建和使用。 运行结果: 更新完毕##

  • Python机器学习基础教程学习笔记(1)——用到的库

    Python机器学习基础教程学习笔记(1)——用到的库 1 Numpy numpy数组 2 Scipy scipy...

  • Python学习笔记3-Numpy

    Numpy 学习莫烦python,非常感谢~记录自己在学习python过程中的点滴。 Numpy 安装 Anaco...

  • Numpy 学习

    创建指定数值的数组 高级通用函数的特性

  • numpy学习

    按序数获取数据。不同的书写方式,可能维度会降低,可能跟原先的一样。 在数组中间某行获取数据有两种方式:整数和切片混...

  • Numpy学习

    本文首发于我的博客:gongyanli.com参考视频:莫烦的numpy视频/ 前言:和pandas一样,nump...

网友评论

      本文标题:numpy学习

      本文链接:https://www.haomeiwen.com/subject/ufmtuktx.html