Numpy开坑(1)

我是对着numpy中文文档直接啃的,这系列博客主要是作为自己的学习笔记来写的,可能大家看起来结构没那么清晰,请谅解。

  1. numpy中的数组
  • 快速定义一维数组
import numpy as np
array = np.array([1,2,3])
print(type(array))
>>> <class 'numpy.ndarray'>
print(array)
>>> [1 2 3]
print(array.shape)
>>>(3,)   #说明是包含三个元素的数组
  • 创建长度为五的元素全部为0的数组
# 注意是两个括号,实际上是创建了一个5*1的矩阵
new_array = np.zeros((5))
  • 创建随机[0,1)数字的4*4矩阵
array = np.random.random((4,4))
print(array)
  • 从多维数组提取一列/行
array = np.array([[1,2,3],[1,2,3]])
print(array[:,2])
>>> [3 3]
  1. numpy中的数组计算操作
  • 相加
a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
print(a+b)
>>>[[ 6.  8.]
 	[10. 12.]]
  • 相乘(对应位置相称,不是我一开始理解的矩阵相称)
a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
print(a*b)
  • 矩阵乘法(使用numpy数组的dot方法)
a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
print(a.dot(b))
>>>[[19. 22.]
	 [43. 50.]]

最简单的用法完毕

下面是稍微不最简单的用法

  • 创建二维数组,这里基本上创建的可以理解为一个矩阵
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(a[2,4])
  • 二维数组切片
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(a[0,1:3]) #第0行第1到第2个元素
print(a[:,2:4])	#每一列的第2到第3个元素
print(a.ndim) #数组的维度
  • 一维数组变二维
a = np.arange(25)  #创建元素从0 到 24 的一维数组
a = a.reshape((5, 5))	#将一维数组变成5*5的数组
# print(a)
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)  #返回逐一比较的的布尔值
  • 一些函数操作
a = np.arange(25)
a.reshape((5,5))
print(a.sum())
print(a.max())
print(a.cumsum())
  • 索引进阶
a = np.arange(0,100,10)
print(a)
k = [1, 5, -1]
b = a[k]
print(b) >>> [10, 50, 90] # 返回的是第一个,第五个,最后一个
  • 突然回过来复习 reshape(), reshape是有一个返回值的,并不是直接将数组变成(n,n)的数组,需要先接收返回的变形数组,然后操作,然后注意用的是()

  • 因为多维数组越界造成的越界报错

a = np.arange(0,100,10)
print(a[:,1])
# 这样就会报错too many indices for array
  • 布尔屏蔽的使用
import matplotlib.pyplot as plt
import numpy as np

#这里相当于设置了一个定义域
a = np.linspace(0, 2 * np.pi, 50)
#将定义域传入函数
b = np.cos(a)
print(len(b))   
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()

上面的示例显示了如何进行布尔屏蔽。你所要做的就是将数组传递给涉及数组的条件,它将为你提供一个值的数组,为该条件返回true。
我们利用这些条件来选择图上的不同点。蓝色点(在图中还包括绿点,但绿点掩盖了蓝色点),显示值大于0的所有点。绿色点表示值大于0且小于一半π的所有点。

  • 不完全索引
import numpy as np

a = np.arange(0, 100, 10)
b = a[:5]
c = a[a >= 50]
print(b) # >>>[ 0 10 20 30 40]
print(c) # >>>[50 60 70 80 90]
  • where()函数获取下标
a = np/arange(0,100,10)
b = np.where(a > 20)
print(b[0]) >>>[3 4 5 6 7 8 9]

这里差不多是numpy所有基础用法了

posted @ 2019-04-08 11:53  ayang818  阅读(191)  评论(0编辑  收藏  举报