Numpy基础笔记

本文是Numpy基础,适合把Numpy基础操作都忘了的人阅读。

数组基础

1.1 创建一个数组

数组有多种创建方法,最基本的方法是将序列传递给array函数,你可以传递任何序列(类数组),而不仅仅是常见的列表(list)数据类型。

np.array 传递一个序列,根据传进来的序列构造numpy数组
np.arange 类似Python中的range,参数为start,end,step,构造一个符合条件的整数组成的数组
np.zeros 传递一个shape,一维的话就是一个数字,二维的就是一个元组,构造一个全0的numpy数组
np.onesnp.zeros一样,也是传递一个shape,构造全1的numpy数组
np.linspace 参数一般分别为start,end,元素个数

以上只是日常用法,也并未完全涵盖所有参数,如果遇到别的情况,参考numpy.linspace

注意,Python中是没有数组的概念的,只有列表,列表的列表,列表的列表的列表(或者序列的序列)。所以用np.array()创建高维数组时,我们传递的其实是“列表的列表…”

# 1D Array
a = np.array([0, 1, 2, 3, 4])
b = np.array((0, 1, 2, 3, 4))
c = np.arange(5)
d = np.linspace(0, 2*np.pi, 5)

print(a) # >>>[0 1 2 3 4]
print(b) # >>>[0 1 2 3 4]
print(c) # >>>[0 1 2 3 4]
print(d) # >>>[ 0.          1.57079633  3.14159265  4.71238898  6.28318531]
print(a[3]) # >>>3

1.2 多维数组切片

多维数组切片时,维度以逗号分隔,通过对每个维度进行单独的切片,从而进行多维的切片。

比如,在二维数组中,第一片进行行的切片,第二片进行列的切片。

对于每个维度,切片的形式为start:end:step,缺省时start=0, end=-1,step=1

# MD slicing
print(a[0, 1:4]) # >>>[12 13 14]
print(a[1:4, 0]) # >>>[16 21 26]
print(a[::2,::2]) # >>>[[11 13 15]
                  #     [21 23 25]
                  #     [31 33 35]]
print(a[:, 1]) # >>>[12 17 22 27 32]

1.3 数组的属性

数组的属性是指a.shape和 a.dtype等,如何获取一个数组的这些基本信息,也是需要熟悉的基础知识。

type(a)Python函数,返回Python中一个数据结构的数据类型
a.shape 数组的形状
a.dtype 数组中元素的数组类型。通常整数默认是np.int64
a.size 数组中的元素个数
a.itemsize 每个元素的字节数,np.int64就是8字节
a.dim 数组的维度数。二维数组的维度数是2
a.nbytes 数组的所有元素共占有多少字节

# Array properties
a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28 ,29, 30],
              [31, 32, 33, 34, 35]])

print(type(a)) # >>><class 'numpy.ndarray'>
print(a.dtype) # >>>int64
print(a.size) # >>>25
print(a.shape) # >>>(5, 5)
print(a.itemsize) # >>>8
print(a.ndim) # >>>2
print(a.nbytes) # >>>200

使用数组

2.1 基本操作

numpy数组基本的操作运算,包括四则运算(+, -, *, /)、乘方(**)、逻辑运算(>, <, 等)、点积(dot)。点积是矩阵乘法,其他的运算都i是逐元素进行。

# Basic Operators
a = np.arange(25)
a = a.reshape((5, 5))

b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
              4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
              56, 3, 56, 44, 78])
b = b.reshape((5,5))

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** 2)
print(a < b) print(a > b)

print(a.dot(b))

2.2 特殊运算

对于numpy数组的一些特殊处理,比如找出numpy数组所有元素中的最大值、最小值,对numpy数组中的元素求和。

a.min() 找出数组中的最小元素
a.max()找出数组中的最大元素
a.sum()求出数组中元素的和
a.cumsum()返回一个数组,其中的每个元素都是 前面所有元素的和

索引进阶

3.1 Fancy Indexing

花式索引

# Fancy indexing
a = np.arange(0, 100, 10)
indices = [1, 5, -1]
b = a[indices]
print(a) # >>>[ 0 10 20 30 40 50 60 70 80 90]
print(b) # >>>[10 50 90]

3.2 Boolean Masking

布尔屏蔽

将numpy数组进行逻辑运算,得到一个相同shape的mask,再以a[mask]得到boolean masking的结果。注意得到的新numpy数组具有新的shape

# Boolean masking
import matplotlib.pyplot as plt

a = np.linspace(0, 2 * np.pi, 50)
b = np.sin(a)
plt.plot(a,b)
mask = b >= 0
plt.plot(a[mask], b[mask], 'bo')
mask = (b >= 0) & (a <= np.pi / 2)
plt.plot(a[mask], b[mask], 'go')
plt.show()

3.3 Where

np.where可以得到经过条件筛选后的新numpy数组,一般条件可以是a < 2等numpy数组的逻辑运算。

# Where
a = np.arange(0, 100, 10)
b = np.where(a < 50) 
c = np.where(a >= 50)[0]
print(b) # >>>(array([0, 1, 2, 3, 4]),)
print(c) # >>>[5 6 7 8 9]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值