【导读】这里是numpy教程的基础部分,涵盖了使用numpy的ndarrays执行数据操作和分析的一些操作。众所周知,Numpy是Python中最基本和最强大的科学计算和数据处理软件包,下面是关于专知成员Fan在学习Numpy教程Part1的一个提炼总结。
原文参照以下链接:
https://www.machinelearningplus.com/numpy-tutorial-part1-array-python-examples/
注意:以下标红的部分是笔者学习后认为比较重要,以及常用的一些操作。
一、如何创建一个numpy数组?
1、创建numpy数组的方法有很多,其中最常用的是利用list创建数组。
import numpy as np
list1 = [0,1,2,3,4]
arr1d = np.array(list1)
2、array与list的最大区别是array是用来进行向量化操作(向量的应用特别广泛),而list不是;且array相比之下占用内存少。
3、你不可以给list中的元素全部直接加一个数,但是你可以对array进行这样的操作
list1 + 2 # error
arr1d + 2 #correct
#输出结果
> array([2, 3, 4, 5, 6])
4、一旦array创建,不可以改变大小,而list可以
5、array只能有一种数据类型,list可以有多种类型,但是我们可以例如:
arr1d_obj = np.array([1, 'a'], dtype='object')
6、将一个array变回list
arr1d_obj.tolist()
7、改变array的数据类型(将arr1d数据类型改为float)
arr1d.astype('float')
8、arr1d是一维数组,构建二维数组同样很简单,三维类似
list2 = [[0,1,2], [3,4,5], [6,7,8]]
arr2d = np.array(list2)
arr2d
#结果
> array([[0, 1, 2],
> [3, 4, 5],
> [6, 7, 8]])
二、array的一些固有参数?
1、array的维度
2、array每一维的情况,例如数组是3*4
3、数组的数据类型
4、数组的索引
# shape
print('Shape: ', arr2d.shape)
# dtype
print('Datatype: ', arr2d.dtype)
# size
print('Size: ', arr2d.size)
# ndim
print('Num Dimensions: ', arr2d.ndim)
三、如何从数组中提取特定元素?
1、例如提取前2行和列
arr2d[:2, :2]
2、numpy array支持bool型的索引,例如下面找出arr2d中大于4的情况:
b = arr2d > 4
b
#结果
> array([[False, False, False, False],
> [False, False, True, True],
> [ True, True, True, True]], dtype=bool)
在此情况下,我们通过下面操作可以找出大于4的元素:
arr2d[b]
四、如何变化数组的行与列?
1、反转行(反转列类似),即最后一行变为第一行,其他也类推:
arr2d[::-1, ]
2、转置
arr2d[::-1,::-1 ]
五、如何表示数组中消失或无穷大的元素?
1、可以用nan表示消失的元素,inf表示无穷大的元素。(处理数据时,可能发现数据为Nan的情况)
例如插入nan与inf
arr2d[1,1] = np.nan # not a number
arr2d[1,2] = np.inf
2、判断nan和inf,所对应的索引,然后改为-1:
missing_bool = np.isnan(arr2d) | np.isinf(arr2d)
arr2d[missing_bool] = -1
六、如何计算均值、最大值、最小值?
1、
print("Mean value is: ", arr2d.mean())
print("Max value is: ", arr2d.max())
print("Min value is: ", arr2d.min())
2、计算每一行/每一列的最小值(最大值、均值类似):
print("Column wise minimum: ", np.amin(arr2, axis=0))#列
print("Row wise minimum: ", np.amin(arr2, axis=1))#行
七、如何利用一个已有的数组创建一个新的数组?
1、
arr2a = arr2d[:2,:2]
arr2a[:1, :1] = 100
注意这里会改变arr2d中的元素,上述过程并没有真正创建一个数组
2、
arr2b = arr2d[:2, :2].copy()
arr2b[:1, :1] = 101
(对于数据的拷贝和更改要十分注意)
注意这里不会改变arr2d,是一种复制
八、Reshaping 和 Flattening一个数组
1、reshape可以改为其他形式的数组,flatten改为一维数组
arr2d.reshape(4, 3)
九、flatten()与ravel()的区别?
ravel后改变元素会改变原始数组的值,而flatten不会改变
十、产生数组元素
1、线性切分:
np.linspace(start=1, stop=50, num=10, dtype=int)#1-50,划分十个数
2、对数切分:(注意起始与中止的数是要以幂次的形式,这里底为10,次方分别为1和50)
np.logspace(start=1, stop=50, num=10, base=10) #10^1-10^50划分十个数
3、创建2*2的全0和全1数组:
np.zeros([2,2])
np.ones([2,2])
4、
np.arange(0, 10, 2)#0-10以2为间隔划分
十一、如何重复序列
a = [1, 2, 3]
# 重复a序列两次
print('Tile: ', np.tile(a, 2))
# 重复a中元素两次
print('Repeat: ', np.repeat(a, 2))
# > Tile: [1 2 3 1 2 3]
# > Repeat: [1 1 2 2 3 3]
十二、如何产生随机数
1、
print(np.random.randint(0, 10, size=[2,2]))#产生元素为0-10的2*2数组
2、
print(np.random.choice(['a', 'e', 'i', 'o', 'u'], size=10, p=[0.3, .1, 0.1, 0.4, 0.1]))
#在字符中,随机产生十次字符,每次产生时,按照给定可能性产生
3、给一个随机种子:
np.random.seed(100)
# Create random numbers between [0,1) of shape 2,2
print(np.random.rand(2, 2))
# > [[ 0.54 0.28]
# > [ 0.42 0.84]]
十三、如何知道数组中所含有的元素以及每个元素所对应的个数?(用于统计数组中的数据以及数据个数)
np.random.seed(100)
arr_rand = np.random.randint(0, 10, size=10)
print(arr_rand)
# > [8 8 3 7 7 0 4 2 5 2]
# Get the unique items and their counts
uniqs, counts = np.unique(arr_rand, return_counts=True)
print("Unique items : ", uniqs)
print("Counts : ", counts)
# > Unique items : [0 2 3 4 5 7 8]
# > Counts : [1 2 1 1 1 2 2]
总结:
好的,以上就是Numpy教程的基础部分,后续会介绍Numpy教程的提升部分,将详细说明Numpy用于数据分析所体现的功能。我们都知道python以其强大的数据处理能力著称,而numpy则是python数据处理最重要的包之一。在这里编者圈出了原文(part1部分)关于特殊形式array的构造、array中特定元素的提取、以及array中的数据统计情况。
-END-
专 · 知
人工智能领域主题知识资料查看获取:【专知荟萃】人工智能领域26个主题知识资料全集(入门/进阶/论文/综述/视频/专家等)
同时欢迎各位用户进行专知投稿,详情请点击:
【诚邀】专知诚挚邀请各位专业者加入AI创作者计划!了解使用专知!
请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料!
请扫一扫如下二维码关注我们的公众号,获取人工智能的专业知识!
请加专知小助手微信(Rancho_Fang),加入专知主题人工智能群交流!
点击“阅读原文”,使用专知!