python数据分析之numpy
创始人
2024-01-17 03:45:21
0

数据分析之Numpy

1、Numpy的数组对象及其索引

import numpy as np
import numpy as npa=np.array([1,2,3,4])
print(a)
b=np.array([2,3,4,5])
print(b)print(a+b)

产生数组

从列表产生数组:

list_array=[1,2,3,4]
a=np.array(list_array)
print(a)

从列表传入:

a=np.array([1,2,3,4])
print(a)

生成全0的数组:

zero=np.zeros(5)
print(zero)

生成全1的数组:

ones=np.ones(5,dtype='int')
print(ones)

可以使用fill方法将数组设为指定值:

list_array=[1,2,3,4]
a=np.array(list_array)
a.fill(5)
print(a)

与列表不同,数组中要求所有元素的dtype都是一样的,如果传入的参数类型与数组类型不一样,需要按照已有的类型进行转换:

a=np.array([1,2,3,4])
a=a.astype('float')
a.fill(2.5)
print(a)

生成整数序列:

a=np.arange(1,10) # 左闭右开
print(a)

生成等差数列:

a=np.linspace(1,10,10) # 左闭右闭
print(a)

生成随机数:

a = np.random.randn(10) # 标准正态分布
print(a)a=np.random.randint(1,10,10)
print(a)

数组属性

查看数组中数据的类型:

a=np.random.randint(1,10,10)
print(type(a))
print(a.dtype)

查看形状,会返回一个元组,每一个元素代表这一维的元素数目:

a=np.random.randint(1,10,10)
print(a.shape)

查看数组里面元素的数目:

a=np.random.randint(1,10,10)
print(a.size)

查看数组的维度:

a=np.random.randint(1,10,10)
print(a.ndim)

ndarray

ndarray (N-dimensional array)意思是n维数组;n维数组,也称为张量(tensor)或矩阵(matrix)

一个零维数组,也就是一个点,我们称作标量(scalar);一个一维数组,也就是一行或者一列,我们称作向量(vector);一个二维的数组,我们称作矩阵(matrix)

NumPy 最重要的一个特点是其 N 维数组对象ndarray ,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引

  • ndarray 对象是用于存放同类型元素的多维数组。
  • ndarray 中的每个元素在内存中都有相同存储大小的区域。
  • ndarray 内部由以下内容组成:
    • 一个指向数据的指针
    • 数据类型或 dtype
    • 一个表示数组形状(shape)的元组,表示各维度大小的元组
    • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数
a = np.array([[1, 2], [4, 5], [7, 8]])print("dim:", a.ndim)
print("strides:", a.strides)
print("dtype:", a.dtype)
print("data:", a.data)
print("shape:", a.shape)
print(a)

在这里插入图片描述

ndarray vs list

ndarray 的特点:

  • ndarray 要求所有数据都是同种类型的
  • 每个数据占用空间一样
  • 数组中存储的数据是一段连续的空间

list的特点:

  • 可以容纳不同数据类型
  • list 中只存放对象的引用,再通过引用找到具体的对象
  • 对象的物理地址并不是连续的

在这里插入图片描述

ndarray 查找数据运行效率比list快,同时ndarray 存储的数据是连续的一段空间,而list 对象的物理地址是分散的,ndarray 比 list 更省空间

索引与切片

索引第一个元素:

a=np.array([1,2,3,4])
print(a[0])

修改第一个元素的值:

a=np.array([1,2,3,4])a[0]=5
print(a)

切片,支持负索引:

a=np.array([1,2,3,4])
print(a[1:3]) # 左闭右开print(a[1:-1]) # 左闭右开

省略参数:

a=np.array([1,2,3,4])
print(a[-2:])
print(a[::2])
print(a[::-1])

多维数组及其属性

array还可以用来生成多维数组:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a)#查看形状
print(a.shape)#查看数目
print(a.size)#查看维度
print(a.ndim)
多维数组索引

对于二维数组,可以传入两个数字来索引:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[1,1])

可以利用索引赋值:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[1,1])a[1,1]=-1
print(a)

使用单个索引来索引一整行的内容:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[1])print(a[:,1])

切片是引用

切片在内存中使用的是引用机制:

a=np.array([1,2,3,4])
b=a[1:3]
print(b)
b[0]=10
print(a)

引用机制意味着,python并没有为b分配新的空间来存储它的值,而是让b指向了a所分配的内存空间,因此改变b的值会改变a的值;而这种现象在列表中并不会出现。这样做的好处在于,对应很大的数组,不用大量复制多余的值,节约了空间;缺点在于,可能出现改变一个值改变另一个值的情况

一个解决方法是使用copy()方法产生一个复制,这个复制会申请新的内存:

a=np.array([1,2,3,4])
b=a[1:3].copy()
print(b)
b[0]=10
print(a)

花式索引

切片只能支持连续或者间隔的切片操作,要想实现任意位置的操作,需要使用花式索引fancy slicing

一维花式索引

花式索引需要指定索引位置:

a=np.arange(0,100,10)
print(a)index=[1,2,-3]
y=a[index]
print(y)

使用布尔数组来花式索引:

a=np.arange(0,100,10)
mask=np.array([0,1,1,0,0,1,1,0,0,0],dtype=bool) # 长度必须和数组长度相同
y=a[mask]
print(y)
二维花式索引
a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[(0,1,2),(0,1,0)])

与切片不同,花式索引返回的是原对象的一个复制

“不完全”索引

只给定行索引的时候,返回整行:

a = np.array([[1, 2], [4, 5], [7, 8]])
print(a[:2])

where语句

where()函数会返回所有非零元素的索引

一维数组
a=np.array([1,2,0,3,4])
print(a>2)
print(np.where(a>2))
print(a[a>2])

数组类型

在这里插入图片描述

类型转换
a=np.array([1,2,0,3,4,1.5],dtype=float)
print(a)
asarray函数
a=np.array([1,2.5,3,4])
np.asarray(a,dtype=float)
print(a)
astype方法

astype方法返回一个新数组

a=np.array([1,2,3,4])
b=a.astype(float)
print(a)
print(b)

ndim、shape、dtype、astype的用法

ndim

ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度

shape

shape表示各位维度大小的元组。返回的是一个元组

dtype

dtype一个用于说明数组数据类型的对象。返回的是该数组的数据类型

astype

astype转换数组的数据类型

int32 --> float64 完全ok

float64 --> int32 会将小数部分截断

string --> float64 如果字符串数组表示的全是数字,也可以用astype转化为数值类型

2、数组操作

数组排序

sort函数
a=np.random.randint(1,10,10)
print(a)
print(np.sort(a)) # 数组本身没有发生什么变化
argsort函数

argsort函数返回从小到大的排列在数组中的索引位置

a=np.random.randint(1,10,10)
order=np.argsort(a)
print(order)

求和

a=np.random.randint(1,10,10)
print(np.sum(a))

最大值、最小值、均值、标准差、相关系数矩阵

a=np.random.randint(1,10,10)
b=np.random.randint(1,10,10)# 最大值
print(np.max(a))
print(a.max())#最小值
print(np.min(a))
print(a.min())#均值
print(np.mean(a))
print(a.mean())#标准差
print(np.std(a))
print(a.std())#相关系数矩阵
print(np.cov([a,b]))

多维数组操作

数组形状

reshape方法不会修改原来数组的值,而是返回一个新的数组

a=np.random.randint(1,10,10)
b=a.reshape(2,5)
print(b)
转置
a=np.random.randint(1,10,10)
b=a.reshape(2,5)
print(b)print(b.T)
print(b.transpose())
数组连接
x = np.array([[1, 2], [4, 5]])
y = np.array([[11, 12], [14, 15]])# 默认沿着第一维进行连接
z=np.concatenate((x,y))
print(z)# 沿着第二维进行连接
z=np.concatenate((x,y),axis=1)
print(z)
x = np.array([[1, 2], [4, 5]])
y = np.array([[11, 12], [14, 15]])# 沿着第一维进行连接
vertical=np.vstack(x,y)
print(vertical)# 沿着第二维进行连接
horizontal=np.hstack(x,y)
print(horizontal)# 连接成三维数组
three=np.dstack(x,y)
print(three)

3、numpy内置函数

numpy 内置函数总结

shape与axis

x = np.array([[1, 2], [4, 5],[7,8]])
print(x.shape) # (3, 2)sum=np.sum(x,axis=0)
print(sum) # [12 15]sum=np.sum(x,axis=1)
print(sum) # [ 3  9 15]

参考

1、NumPy Ndarray 对象

2、Python numpy中的ndarray介绍

3、python-Numpy学习之(一)ndim、shape、dtype、astype的用法

相关内容

热门资讯

写给临近高考的信范文【优秀6... 写给临近高考的信范文 篇一亲爱的同学们:时光如白驹过隙,转眼间我们即将面临人生中最重要的考试——高考...
高考作文万能开头结尾(最新5... 高考作文万能开头结尾 篇一开头:引用名言或提出问题结尾:总结观点或给出建议标题:教育的力量开头:“教...
四川高考满分作文【精选3篇】 四川高考满分作文 篇一:《勇敢追梦,不负韶华》在四川高考中,我所写的这篇作文是以“勇敢追梦,不负韶华...
高考语文经典作文素材【推荐6... 高考语文经典作文素材 篇一标题:母爱的力量母亲是我们最亲近的人,她们用无尽的爱和关怀呵护着我们成长。...
高考英语真题短文范文(优质6... 高考英语真题短文范文 篇一Title: The Importance of Cultural Exc...
高考英语美丽乡村作文范文6篇... 高考英语美丽乡村作文范文6篇 篇一:美丽乡村的变迁随着工业化的发展和城市化的推进,许多农村地区正面临...
高考满分作文800字【推荐6... 高考满分作文800字 篇一:淡定面对高考高考,对于每一个即将迎来它的学生而言,都是一场重要的考试,甚...
高考语文作文阅读理解范文【精... 高考语文作文阅读理解范文 篇一中国古代文学与现代文学的对比近年来,随着高考语文阅读理解题目的增加,对...
高考作文万能语句(优秀3篇) 高考作文万能语句 篇一高考作文是考生们面临的一项重要考试,写好作文对于提高分数至关重要。下面是一些万...
高考范文去哪找素材(推荐6篇... 高考范文去哪找素材 篇一高考作文的素材从何而来?这是许多考生关心的问题。事实上,我们可以从多个渠道获...
浙江高考语文满分作文【最新4... 浙江高考语文满分作文 篇一:探寻诗意的生活路径在浙江高考语文满分作文中,我选择了探寻诗意的生活路径作...
与你为邻高考作文【优选3篇】 与你为邻高考作文 篇一假设我是一名高中生,住在一个与你为邻的小区里。小区的环境很好,绿树成荫,鸟语花...
高考写作素材:广州的别称及历... 高考写作素材:广州的别称及历史介绍 篇一广州的别称及历史介绍广州,是中国南方一座历史悠久、文化底蕴深...
好奇心高考优秀作文【优秀3篇... 好奇心高考优秀作文 篇一:拓展视野,培养好奇心好奇心是人类进步的源泉之一。它能够驱使我们不断探索未知...
河北高考作文【精简6篇】 河北高考作文 篇一题目:探索创新教育模式,培养高素质人才随着社会的不断发展,高素质的人才已经成为社会...
高考满分作文:站在文学的门口... 高考满分作文:站在文学的门口 篇一文学的魅力无穷,她是人类智慧的结晶,是人类情感的寄托。站在文学的门...
高考作文热点终极预测深入理解... 高考作文热点终极预测深入理解他人 篇一深入理解他人的重要性作为一个社会人,我们时常需要与他人进行交流...
广东发布高考优秀作文:有人梦... 广东发布高考优秀作文:有人梦回唐朝有人爱当代 篇一梦回唐朝的心愿唐朝,是我心中的一段梦幻时光。在这个...
高考零分作文藏头诗「经典」(... 高考零分作文藏头诗「经典」 篇一《才华横溢》才华横溢的学子们,高考之际展风采。作文题目如此新,藏头诗...
北京新高考数学作文范文【优质... 北京新高考数学作文范文 篇一探索数学的美妙世界数学,作为一门普遍存在于我们日常生活中的学科,被许多学...