python_数据分析_numpy库

一、创建ndarray

*ndarray是NumPy中表示数组的重要类型

1、使用np.array()创建

*参数列表:[1,2,3,4]

注:(1)、numpy默认ndarray的所有元素的类型是相同的
​
(2)、如果传入的数据类型不同,会被按照优先级强制转换为同一类型,其中优先级为   str >float >int
​
(3)、ndarray常见的数据类型:
    int: int8、uint8、int16、int32、int64
    float:float16、float32、float64
    str:字符串
a = [1,2,3,4,5]
n = np.array(a)
print(n)
#显示类型
print(type(n))
#显示形状
print(n.shape)
2、使用np的routines函数创建
(1)、np.ones(shape,dtype = None,order = 'C')

*创建一个所有元素都为1的多维数组

参数说明:

  • shape:形状

  • dtype=None,元素类型

order:{‘C’,‘F’},可选,默认值:C是否在内存中以行主或列主顺序存储多维数据,一般默认

n = np.ones(shape=(3,),dtype = np.int8)
(2)、np.zeros(shape,dtype = float,order = 'C')

*创建一个所有元素都为0的多维数组

参数说明:

  • *shape:形状

  • *dtype = None:元素类型

n = np.zeros(shape = (5,5),dtype = np.int16)
(3)、np.full(shape,fill_value,dtype = None,order = 'C')

*创建一个所有元素都为指定元素的多维数组

参数说明:

  • *shape:形状

  • *fill_value:填充值

  • *dtype = None:元素类型

n = np.full(shape = (3,4),fill_value = 8)
(4)、np.eye(N,M=None,k=0,dtype=float)

*对角线为1其他位置为0的二维数组

参数说明:

  • *N:行数

  • *M:列数,默认为None,表示和行数一样

  • *k :主对角线向右偏移的位置

  • *dtype = None:元素类型

n = np.eye(9,9,k=3)
(5)、np.linspace(start,stop,num = 50,endpoint = True,restep = False,dtype = None)

*创建一个等差数列

参数说明:

  • start:开始值

  • stop:结束值

  • num= 50:等差数列中默认有50个数

  • endpoint = True:是否包含结束值

  • restep = False:是否返回等差值(步长)

  • dtype = None:元素类型

n = np.linspace(1,9,5)
print(n)
(6)、np.arange(start,stop,step,dtype = None)

*创建一个数值范围的数组

*和Python中range功能类似

参数说明:

start:开始值

stop:结束值(不包含)

step:步长

dtype = None:元素类型

n = np.arange(2,10,2)
print(n)
(7)、np.random.randint(low,high = None,size = None,dtype = None)

*创建一个随机整数的多维数组

参数说明:

  • low:最小值

  • high:None:最大值

    • 注:high=None时,生成的数值在(0,low)之间

    • 如果使用high这个值,则生成的数值在(low,high)之间

  • size = None:数组形状,默认只输出一个随机值

  • dtype = None:元素类型

#随机整数:单个数
n = np.random.randint(3,10)
print(n)
#随机整数:一维数组
n = np.random.randint(3,10,size=6)
print(n)
#随机整数:二维数组
n = np.random.randint(3,10,size=(3,4))
print(n)
#随机整数:三维数组
n = np.random.randint(0,256,size=(20,40,3))
print(n)
(8)、np.random.randn(d0,d1,......,dn)

*创建一个服从标准正态分布的多维数组

*创建一个所有元素都为1的多维数组

参数说明:

  • dn:第n个维度的值

    n = np.random.randn(1,2,3)
    print(n)

(9)、np.random.normal(loc = 0.0,scale = 1.0,size = None)

*创建一个服从正态分布的多维数组

参数说明:

  • loc:均值

  • scale:标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦

  • size = None:数组形状

n = np.random.normal(10,0.5,size=(3,4))
print(n)
(10)、np.random.random(size = None)

*创建一个元素为0~1(左闭右开)的随机数的多维数组

参数说明:

  • size= None:数组形状

n = np.random.random(size=(3,4))
print(n)
(11)、np.random.rand(d0,d1,......,dn)

*同np.random.random(size = None)

*创建一个元素为0~1(左闭右开)的随机数的多维数组

参数说明:

  • dn:第n个维度的数值

n = np.random.rand(3,4)
print(n)

二、ndarray的属性

1、ndim(维度)
n = np.random.rand(3,4)
print(n)
w = n.ndim
print(w)
2、shape(形状)

*三个数字分别表示各个维度的长度

n = np.random.rand(3,4)
print(n)
w = n.ndim
print(w)
x = n.shape
print(x)
3、size(总长度)

*即:行和乘列和

n = np.random.rand(3,4)
print(n)
w = n.ndim
print(w)
x = n.shape
print(x)
c = n.size
print(c)
4、dtype(元素类型)
n = np.random.rand(3,4)
print(n)
w = n.ndim
print(w)
x = n.shape
print(x)
c = n.size
print(c)
l = n.dtype
print(l)

三、ndarray的基本操作

1、索引

一维和列表索引的操作一致。

2、 根据索引修改数据

(1)、将第二行全部数字改为0.88

n= np.random.rand(3,4)
print(n)
#将第二行全部数字改为0.88
n[1]=0.88
print(n)

(2)、将第二行最后一个数改为0.88

a= np.random.rand(3,4)
print(a)
#将第二行最后一个数改为0.88
a[1][3]=0.88
print(a)
3、切片
import numpy as np
#列表有逗号间隔
# I = [1,2,3,4,5,6,7,8]
# a = I[2:6]
# b = I[::-1]   #翻转
# print(a)
# print(b)
# #数组没有逗号间隔
# n = np.array(I)
# a = n[2:6]
# print(n)
# print(a)

#对于二维数组的行切片
n = np.random.randint(0,10,size=(6,8))
# #取一行
# print(n[0])
# #连续取多行
# print(n[1:4])
# #取不连续多行
# print(n[[1,2,4]])

#对于二维数组的列切片
n = np.random.randint(0,10,size=(6,8))
print(n)
#取一列
print(n[:,0])   #取第一列
print(n[1:4,0])  # 取第二到第四行的第一列
#取连续的多列:切片
print(n[:,2:5])  #取第三到第五列的所有行
#取不连续的多列:中括号
print(n[:,[1,3,4]])  #取第二列和第四列和第五列的所有行
4、翻转

(1)、行翻转

n[::-1]

(2)、列翻转

n[:,::-1]
5、变形

使用reshape函数

import numpy as np

n = np.arange(1,21)
print(n)

#reshape:将数组改变形状  变成二维
a = np.reshape(n,newshape=(4,5))
print(a)

#使用-1:表示任意剩余维度长度
e = n.reshape(4,-1)
print(e)
r = n.reshape(-1,2)
print(r)
6、级联(合并)
#级联(合并)
a = np.concatenate((n1,n2))  #上下合并
print(a)

l = np.concatenate((n1,n2),axis=0)  #上下合并
print(l)

p = np.concatenate((n1,n2),axis=1)  #左右合并
print(p)

#左右合并
i = np.hstack((n1,n2))
print(i)

#上下合并
u = np.vstack((n1,n2))
print(u)
7、拆分

(1)、np.split()

(2)、np.hsplit()

(3)、np.vsplit()

import numpy as np

n = np.random.randint(0,100,size=(4,4))
print(n)
a = np.split(n,4)
print(a)
b = np.hsplit(n,4)
print(b)
#垂直拆分,平均拆成3份
c = np.vsplit(n,4)
print(c)
#按照指定位置拆分
d = np.vsplit(n,(1,2,4))
print(d)
#水平拆分
e = np.hsplit(n,4)
print(e)
print()
#split:做水平和垂直拆分
#axis = 0:行
#axis = 1:列
a = np.split(n,4)
a = np.split(n,4,axis=0)
print(a)
print()
m = np.split(n,4)
m = np.split(n,4,axis=1)
print(m)
8、拷贝
import numpy as np

#n2不会随着n的变化而变化
n = np.random.randint(0,10,size=(2,3))
n2 = n.copy()
n[0][0] = 0
print(n2)
print(n)

#注:如果用n3 = n,则n2会随着n的变化而变化
n3 = n
print(n3)

四、numpy的聚合操作

1、求和np.sum()
import numpy as np

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

s = np.sum(n)
print(s)

n = np.random.randint(0,10,size=(3,5))
print(n)
s1 = np.sum(n)
print(s1)   #全部数加起来
s2 = np.sum(n,axis=0)
print(s2)   #表示每一列的多行求和
s3 = np.sum(n,axis=1)
print(s3)   #表示每一行的多列求和
2、最小值np.min
3、最大值np.max
4、平均值np.mean
5、平均值np.average
6、中位数np.median
7、百分位数np.percentile
8、最小值对应的下标np.argmin
9、最大值对应的下标np.argmax
10、标准差np.std
11、方差np.var
12、次方,求幂np.power
13、按条件查找np.argwhere
14、np.nansum
  • *nan:数值类型,not a number:不是一个正常的数值,表示空

  • *np.nan:float类型

#对于含有空的数组,要用np.nansum进行求和
n = np.array([1,2,3,np.nan])
print(n)
#实质是去掉空值后的数组进行求和
s4 = np.nansum(n)
print(s4)

五、矩阵操作

1、基本的矩阵操作

算术运算符:加减乘除

矩阵和矩阵之间运算

数与矩阵运算

2、矩阵乘积

np.dot(第一个矩阵的列数等于第二个矩阵的行数)

import numpy as np

n1 = np.random.randint(0,10,size=(4,4))
n2 = np.random.randint(0,10,size=(4,5))
print(n1,n2)
print()
n3 = np.dot(n1,n2)
print(n3)
3、矩阵的逆
n4 = np.linalg.inv(n2)
print(n4)
4、行列式的计算
n5 = np.round(np.linalg.det(n1))
print(n5)
5、矩阵的秩
n6 = np.linalg.matrix_rank(n1)
print(n6)

六、ndarray的广播机制

(1)、为缺失的维度补维度

(2)、缺失元素用已有的数组填充

import numpy as np

x = np.full(shape=(3,3),fill_value=2)
print(x)
y = np.arange(3)
print(y)
z = x+y
print(z)
#注:第二个数组会自动补上两行[0 1 2],然后在进行相加

七、数学操作

import numpy as np

n = np.array([1,2,3,5,5,44,55,66])

#绝对值
print(np.abs(n))
#平方根
print(np.sqrt(n))
#平方
print(np.square(n))
#指数
print(np.exp(n))
#自然对数
print(np.log(n))
#以2为底的对数
print(np.log2(n))
#以10为底的对数
print(np.log10(n))
#正弦函数
print(np.sin(n))
#余弦函数
print(np.cos(n))
#正切函数
print(np.tan(n))
#向上取整
print(np.ceil(n))
#四舍五入
print(np.round(n,2))
#向下取整
print(np.floor(n))
#累加
print(np.cumsum(n))

八、ndarray的排序

1、np.sort()

不改变输入

import numpy as np

n = np.array([55,44,8,2,9,7,3,6])
print(np.sort(n))
print()
2、ndarray.sort()

本地处理,不占用空间,但不改变输入

import numpy as np

n1 = np.random.randint(0,10,size=8)
print(n1)
n1.sort()
print(n1)

九、文件操作

1、保存数组到npy或npz文件

save:保存ndarray到一个npy文件。

savez:将多个array保存到一个npz文件中。

import numpy as np

x = np.arange(5)
y = np.arange(10,20)

np.save('x',x)
np.savez('arr.npz',xarr = x,yarr = y)
a = np.load('x.npy')
b = np.load('arr.npz')['yarr']

print(a)
print(b)
2、保存数组到csv或txt文件
n = np.random.randint(0,10,size=(3,4))
#存储到csv或txt
#delimiter = ',':分隔符
np.savetxt('arr.csv',n,delimiter=',')
#读取csv或txt
#注:最新版numpy不能用dtype要用astype
c = np.loadtxt('arr.csv',delimiter=',').astype(np.int8)
print(c)

相关推荐

  1. python_数据分析_numpy

    2024-02-19 13:54:01       29 阅读
  2. Python数据处理和常用(如NumPy、Pandas)

    2024-02-19 13:54:01       17 阅读
  3. 数据分析NumPy

    2024-02-19 13:54:01       36 阅读
  4. 数据分析NumPy

    2024-02-19 13:54:01       37 阅读
  5. 3 数据分析--Numpy

    2024-02-19 13:54:01       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-19 13:54:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-19 13:54:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-19 13:54:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-19 13:54:01       18 阅读

热门阅读

  1. redis键的过期删除策略

    2024-02-19 13:54:01       27 阅读
  2. 第1章 计算机系统概述(2)

    2024-02-19 13:54:01       29 阅读
  3. 突破编程_C++_面试(变量与常量)

    2024-02-19 13:54:01       28 阅读
  4. httpclient发送post请求、httpclient上传文件

    2024-02-19 13:54:01       23 阅读
  5. C语言之删除字符串中间和后面的*

    2024-02-19 13:54:01       31 阅读
  6. c++ 6

    c++ 6

    2024-02-19 13:54:01      25 阅读
  7. Kubernetes基础(二十一)-k8s的服务发现机制

    2024-02-19 13:54:01       27 阅读
  8. 速盾网络:CDN用几天关了可以吗?安全吗?

    2024-02-19 13:54:01       27 阅读
  9. Makefile整理代码

    2024-02-19 13:54:01       27 阅读