numpy数组

numpy 数组

​ 大型的数组

安装Numpy

(scrapy_env) C:\Users\Administrator>pip install numpy

创建数组,类型转换,保留小数,array(可迭代的对象)

import numpy as np
import random

import numpy as np
# 一维数组,一层列表
t1=np.array([1,2,3,4])
print(t1)
# 二维数组,二层列表
t2=np.arange(0,24).reshape(4,6)
print(t2)
# 三维数组,三层列表
t3=np.arange(0,24).reshape(2,2,6)
print(t3)
#   创建数组
a=np.array(([1,2,3,4,5]))
t1=np.array([random.random() for i in range(10)])
b=np.array(range(1,6))
c=np.arange(1,6)
print(c)

print(np.random.randint(10,20,(4,5)))   #生成随机数组
# < a,b,c 都为class 'numpy.ndarray'>

#   标记位0,1
zeros_data=np.zeros((uk.shape[0],1)).astype(int)# 全0的1列至
ones_data=np.ones((uk.shape[0],1)).astype(int)  # 全1的1列值
t=np.eye(4) #对角线位1,其余为0的对称矩阵

print('='*30)

#   创建时指定数据类型
t1=np.array([1,2,3,4],dtype='float32')
print(t1)
t2=np.array([1,0,1,0],dtype=np.bool)
print(t2)

#   转换数组的数据类型
t1=t1.astype(int)
t2=t2.astype(int)
t3=t2.astype(float)
print(t1)
print(t2,t3)

# 保留小数
t1=np.array([random.random() for i in range(10)])
print(t1)
print(np.round(t1,2))

数组维度的转化

import numpy as np
import random


t1=np.arange(12)
t2=np.array([[1,2,3,7],[4,5,6,8]])
t3=np.array([[[1,2,3],[11,12,13]],[[4,5,6],[14,15,16]]])
print(t1.shape)# 一维数组(12,1)

# 一维数组元素个数shape[0]
print(t1.reshape(3,4))  #一维数组转二维
print(t1.reshape(2,2,3))#一维数组转三维
print(np.arange(24).reshape(6,4)) #一维转二维

# 二维数组元素个数shape[0]*shape[1]
print(t2.shape)# 二维数组(2,3)
print(t2.reshape(8,))   #二维转一维
print(t2.flatten()) #二维转一维
print(t2.reshape(t2.shape[0]*t2.shape[1],)) # 不知道二维数组元素多少个,转一维
print(t2.reshape(2,2,2))#二维转三维

## 数组中的行列转换
print(t2)
print(t2.transpose())
print(t2.T)
print(t2.swapaxes(1,0))

# 三维数组元素个数shape[0]*shape[1]*shape[2]
print(t3.shape)# 三维数组(2,2,3)
print(t3.reshape(2,6)) #三维转二维
print(t3.reshape(12,)) #三维转一维

维度计算

​ 任一维度(面)相同或为1,即可加减乘除

#t1一维,t2二维,t3三维
print(t1*2,t2*2,t3*2)
print(t1/2,t2/2,t3/2)
print(t1-2,t2-2,t3-2)
print(t1+2,t2+2,t3+3)
print(t1/0,t2/0,t3/0)	#返回nan 不是数字,或者inf 无穷大

t1=np.arange(4).reshape(4,1)
t2=np.arange(16).reshape(4,4)
print(t2-t1,t2*t1)

数组下标取值,修改

​ 从0开始,连续用冒号 不连续用 逗号

gk=np.loadtxt('./GK.csv',dtype=int,delimiter=',')
us=np.loadtxt('./US.csv',dtype=int,delimiter=',')
print(gk)
print('='*30)

# 获取行数据
print(gk[[0,3,4]])  #跨行数据
print(gk[1:9])      #多行数据
print(gk[1])        #单行数据
print('='*30)

#获取列数据
print(gk[:,0])          #单列数据
print(gk[:,0:3])        #多列数据
print(gk[:,[[0,2]]])    #跨列数据

#  多行多列
print(gk[[1,15],0:2])
print(gk[[1,15],[0,2]])

#	修改,
t1=np.arange(16).reshape(4,4)
t1[1:3]=100				#索引修改
t1=np.where(t1>10,0,10)	#大于10的,设为0,其他设为10

print(t1.clip(14,18))	#<14 设置为14 >18 设置为18

数组拼接

image-20210306221907331

行列汇总,分组汇总

​ 和,均值,中值,最大值,最小值,极值,标准差

axis=0 为每一列,axis=1 为每一行

# Nan Not a Number

t=np.arange(12).reshape(3,4).astype(float)
print(t)

t[2,3]=np.nan
print(t)

print(np.count_nonzero(t!=t)) #获取nan的个数,不是数字
print(np.count_nonzero(np.isnan(t)))#获取nan的个数,不是数字

# numpy中0轴是列 ,1轴是行
t1=np.array([[1,2,3],[11,12,13]])
print(t1)
#  列的和,行的和
print(t1.sum(axis=0),t1.sum(axis=1))
# 列的平均值,行的平均值
print(t1.mean(axis=0),t1.mean(axis=1))
# 列的最大值,行的最大值
print(t1.max(axis=0),t1.min(axis=1))
# 列的最小值,行的最小值
print(t1.min(axis=0),t1.min(axis=1))

# 列的方差,行的方差,  最大-最小=极值
print(np.std(t1,axis=0),np.std(t1,axis=1))
# 列的极值,行的极值,  最大-最小=极值
print(np.ptp(t1,axis=0),np.ptp(t1,axis=1))
# 列的极值,行的极值,  最大-最小=极值
print(np.median(t1,axis=0),np.median(t1,axis=1))

填充nan为每一列的均值

# Nan Not a Number

# print(t1)
# 吧nan 替换为每一行的均值

for i in range(t1.shape[0]):
    # 获取每一列
    temp_col=t1[i,:]
    # print(temp_col)
    zeros_count=np.count_nonzero(t1!=t1)

    if zeros_count!=0:#说明有空值
        #招到空值列,有值的数字
        nan_column=temp_col[temp_col==temp_col]
        print(nan_column)

        #填充值到nan
        temp_col[np.isnan(temp_col)]=nan_column.mean()
print(t1)

# 吧nan 替换为每一列的均值
# 统计nan的个数 TypeError: 'int' object is not iterable, range一下就可以迭代了
for i in range(t1.shape[1]):
    temp_t1=t1[:,i]
    nan_count=np.count_nonzero(temp_t1!=temp_t1)

    if nan_count!=0:
        # print(temp_t1==temp_t1)
        # 将这一列不为空值的都获取出来
        temp_nan_column=temp_t1[temp_t1==temp_t1]
        # print(temp_nan_column)
        # 在整个当前列中,招到nan 替换为当前列的均值
        temp_t1[np.isnan(temp_t1)]=temp_nan_column.mean()
        # print(temp_nan_column)
print(t1)

def fill_ndarray(t):
    for i in range(t.shape[1]):
        temp_col=t[:,i]     #这里获取的是每一列
        nan_num=np.count_nonzero(temp_col!=temp_col)

        if nan_num!=0:#不为0 说明存在了nan
            temp_not_nan_col=temp_col[temp_col==temp_col]
            #获取nan的当前的一列

            temp_col[np.isnan(temp_col)]=temp_not_nan_col.mean()
            #吧nan的值,赋值为当前列的平均值
    return  t

if __name__ == '__main__':
    t = np.arange(12).reshape(3, 4).astype(float)

    t[2, :3] = np.nan
    t=fill_ndarray(t)
    print(t)

0值得处理,先赋值为nan,再按nan处理

import numpy as np

t1=np.arange(1,25).reshape((4,6)).astype(float)

t1[2:4,1:3]=0
t1[t1==0]=np.nan

print(t1)
# 吧nan 替换为每一列的均值
for i in range(t1.shape[1]):
    temp_col=t1[:,i]

    nan_count=np.count_nonzero(temp_col!=temp_col)
    # print(nan_count)
    if nan_count!=0:
        # 不为0 说明了有nan,先取出这一列,不为空值的情况
        nan_col=temp_col[temp_col==temp_col]
        # print(nan_col)
        temp_col[np.isnan(temp_col)]=nan_col.mean(

数组过滤>10的数据

​ 有时需要过滤数据,制作合适的图表

t=np.arange(24).reshape(4,6)
print(t)
t=t[t<10]   #[t<10]  这里的t是每一个数组内的值
print(t)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值