前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Numpy教程第1部分 - 阵列简介(常用基础操作总结)

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

作者头像
WZEARW
发布2018-04-08 16:29:48
7370
发布2018-04-08 16:29:48
举报
文章被收录于专栏:专知专知

【导读】这里是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中的数据统计情况。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 专知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档