Numpy教程第1部分 - 阵列简介(常用基础操作总结)

【导读】这里是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),加入专知主题人工智能群交流!

点击“阅读原文”,使用专知

展开全文
Top
微信扫码咨询专知VIP会员