[关闭]
@Channelchan 2018-03-21T20:53:04.000000Z 字数 2387 阅读 54316

Numpy

numpy


numpy属性

属性: 形状,数量...

  1. import numpy as np
  2. a = np.arange(9).reshape(3, 3)
  3. print(a)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
  1. # 数组的维度 m*n
  2. print(a.shape)
(3, 3)
  1. # 数组轴的个数
  2. print(a.ndim)
2
  1. b = np.arange(27).reshape(3, 3, 3)
  2. print(b)
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
  1. print(b.ndim)
3
  1. # 数组元素的总个数
  2. print(b.size)
27
  1. # 一个用来描述数组中元素类型的对象
  2. print(b.dtype)
int32

创建数组

array, zeros, ones

  1. # array([])创建数组
  2. c = np.array([1,2,3,4,5])
  1. print(c.dtype)
int32
  1. # 转换数组中元素的类型
  2. d = np.array([1,2,3,4,5], dtype='float64')
  1. print(d.dtype)
float64
  1. # 创建数值为0的数组
  2. print(np.zeros((3,3,3)))
[[[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]]
  1. # 创建数值为1的数组
  2. print(np.ones((3,3,3)))
[[[ 1.  1.  1.]
  [ 1.  1.  1.]
  [ 1.  1.  1.]]

 [[ 1.  1.  1.]
  [ 1.  1.  1.]
  [ 1.  1.  1.]]

 [[ 1.  1.  1.]
  [ 1.  1.  1.]
  [ 1.  1.  1.]]]

基本运算

数组运算,常用函数。

数组运算

  1. e = np.array([20,30,40,50])
  2. f = np.arange(4)
  1. print(e-f)
[20 29 38 47]
  1. print(e*2)
[ 40  60  80 100]
  1. # 返回输入数量的等比间隔,linspace(start, stop, num=50)
  2. g = np.linspace(0,np.pi,3)

常用函数

  1. # 求和
  2. print(g.sum())
4.71238898038
  1. # 累加
  2. print(g.cumsum())
[ 0.          1.57079633  4.71238898]
  1. # 对数
  2. print(np.log(g))
[       -inf  0.45158271  1.14472989]


D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in log
  1. # 指数
  2. print(np.exp(g))
[  1.           4.81047738  23.14069263]
  1. # 开方
  2. print(np.sqrt(g))
[ 0.          1.25331414  1.77245385]

索引,切片和迭代

  1. print(a)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
  1. print(a[:, 1])
[1 4 7]
  1. print(a[1, :])
[3 4 5]
  1. print(a[a>3])
[4 5 6 7 8]
  1. print(b)
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
  1. print(b[-1][-1][-1])
26
  1. print(b[1:])
[[[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
  1. # 迭代
  2. for row in b[0][0]:
  3. print(row)
0
1
2
  1. # flat数组元素迭代器
  2. for element in b.flat:
  3. print(element)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

更改数组的形状

  1. # 将多维数组降位一维
  2. print(a.ravel())
[0 1 2 3 4 5 6 7 8]
  1. a1 = np.array([9,10,11])
  1. # 横向添加数组
  2. a2 = np.vstack((a,a1))
  3. print(a2)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
  1. # 不改变原有数组
  2. print(a2.reshape(2,6))
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
  1. # 改变原有数组
  2. a2.resize(2,6)
  1. print(a2)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
  1. # 转变形状
  2. print(a2.transpose())
[[ 0  6]
 [ 1  7]
 [ 2  8]
 [ 3  9]
 [ 4 10]
 [ 5 11]]
  1. print(a2)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
  1. # 垂直切分
  2. print(np.hsplit(a2,3))
[array([[0, 1],
       [6, 7]]), array([[2, 3],
       [8, 9]]), array([[ 4,  5],
       [10, 11]])]
  1. # 生成对角矩阵
  2. print(np.eye(5))
[[ 1.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  1.]]

矩阵计算基础

矩阵相乘

矩阵A和B必须是相符的矩阵,A的列要等于B的行。

  1. A = np.array([
  2. [1, 2],
  3. [4, 5],
  4. [7, 8]
  5. ])
  6. B = np.array([
  7. [4, 4, 2],
  8. [2, 3, 1],
  9. ])
  10. print(np.dot(A, B))
[[ 8 10  4]
 [26 31 13]
 [44 52 22]]

逆矩阵

矩阵与逆矩阵相乘为 [[1,0][0,1]]

逆矩阵

  1. A=np.array([[2,1],[1,-2]])
  2. # 计算逆矩阵
  3. A_=np.linalg.inv(A)
  4. print(A)
  5. print(A_)
  6. print(np.dot(A,A_))
[[ 2  1]
 [ 1 -2]]
[[ 0.4  0.2]
 [ 0.2 -0.4]]
[[ 1.  0.]
 [ 0.  1.]]

矩阵解线代:

image.png-13.8kB

  1. b=np.array([[1],[1]])
  2. z=np.dot(A_,b)
  3. print(z)
[[ 0.6]
 [-0.2]]
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注