Numpy笔记

numpy的属性

  • shape返回一个元组分别记录着行数与列数
  • size返回矩阵元素的个数
  • ndim返回行数
  • A.T返回矩阵的反向矩阵
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import numpy as np
    array = np.array([[1, 2, 3],
    [2, 3, 4]])
    print array
    pront 'number of dim:', array.ndim
    print 'shape:', shape
    print 'size:', size
    '''反向矩阵'''
    print A.T #T应该为A的一个属性,不影响A的值

建创数组或矩阵

  • np.array()括号里输入矩阵,后有参数dtype选择类型可填int64等
  • np.linspace得到n(n为最后一个参数)个(起点终点也算在内)从起点到终点的等距离点
  • np.zeros与np.ones的参数是一个元祖,也可填参数dtpye
  • A.reshape(n,m)可将数组或矩阵变形,参数为新形状
  • 无论什么方法生成的在交互环境下去用print 得到的结果没有‘,’而直接输入名字结果有‘,’,list就不一样,用不用print都有‘,’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np

'''建创'''
a = np.array([[2, 3, 4], [3, 4, 5]])
a = np.arange(12) #类似于range
a = np.arange(1, 13, 1) #类似于range
a = np.linspace #建创线段
a = np.zeros((3, 4)) #生成3行4列的的矩阵
a = np.ones(3, 4)

'''变形'''
a = a.reshape(4, 3)
a = np.arange(12).reshape(3, 4)

'''定义类型'''
a = np.zeros((3, 4), dtype = np.int64)

python的基本运算

  • 矩阵与数字之间的加减乘除为矩阵的每个元素与次数相运算
  • 矩阵之间的+、-、*、/分别为对应位置的元素相互运算
  • 矩阵之间的乘法表示为np.dot(a,b),或a.doot(b)
  • **表示的是乘方A ** n表示A的n次方不表示矩阵的点乘
  • numpy中也有sin等各种函数
  • 矩阵之间的比较,返回都是True与False的矩阵
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
'''numpy的运算及公式运用'''
a = np.arange(16)
b = np.linspace(5, 10, 16)
c = a + b
d = a - b
e = a * b #将数组或矩阵中的元素挨个相称后形成的新数组
f = a / b #将数组或矩阵中的元素挨个相称后形成的新数组
g = a + 1 #各元素依次加1, 其他的运算符类似
e_dot = np.dot(a, b) #矩阵的乘法
e_dot_ = a.dot(b) #另一种表示方法
h = b ** 3 #表示三次方
k = b ** n #表示n次方
i = np.sin(a) #numpy中的函数
print a, b, c, d, e, f, g, h, k, i
'''numpy数列中的判断'''
a = np.arange(1, 17).reshape(2, 8)
b = np.arange(-6, 26, 2).reshape(2, 8)
print a > b
print a > 5
print b == 5
#起返回的都是一个为True, Fales的矩阵.

numpy的方法

  • np.argmin(A)、np.argmax(A)返回最大值与最小值的索引
  • sum()返回矩阵元素的和,min(),max()返回最小最大值,可加上参数axis = 0 or 1表示对列行进行运算
  • A.mean()、np.mean(A)、np.average(A)进行求平均值np.median(A)求中位数
  • A.cumsum()、np.cumsum()将矩阵元素累加,返回维度减少了一个的数组(只有一个中括号)A.diff(A)将矩阵元素累减返回少一列的矩阵
  • np.sort(A)排序不改变原来矩阵返回排好的矩阵,A.sort改变原来矩阵返回None
  • np.clip(A, 5, 9)返回一个元素不大于9不小于5的矩阵,大于9小于5的分别被赋值成了9,5
  • np.transpose(A)反回A的反向矩阵
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
import numpy as np
'''索引'''
print np.argmin(A)
print np.argmax(A)
'''随机矩阵生成'''
a = np.random.random((2, 4))
'''numpy最大最小值等方法'''
print np.sum(a)
print np.min(a, axis = 1) #axis为1表示列中求和最小值, 为0表示行中求和的最小值,无axis对每个元素求最小值.
print np.max(a)
'''平均数'''
print np.mean(A) #A.mean()
print np.average(A) #无A.average
'''中位数'''
np.median(A) #无A.meadian()
'''累加累减形成的数列'''
print A.cumsum() #累加, np.cumsuum(A),返回新数列
print np.diff(A) #累减, 无A.diff(),返回少一列的矩阵
'''排序'''
print np.sort(A) #从小到大按每行排序不改变数列,返回排好后的数列
print A.sort() #按行从小到大排,改变数列,只返回None
'''截取'''
print np.clip(A,5, 9) #大于9的数被改成9小于5的被改成了5,不改变数列
'''反向矩阵'''
print np.transpose(A) #原数列不变,返回新的矩阵

numpy的索引

  • A[2]对行进行索引,A[2][2]进行二次索引,即索引到了行一次后又对这一行进行了索引
  • A[2, 1]对行列进行索引,也可以切片,行列都可以,
  • for循环默认迭代每一行,可用A.T使其迭代其每一列,用A.flat迭代其每个元素,A.flatten()返回矩阵中的每个元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
A = np.arange(2, 14).reshape(3, 4)
print A
print A[2] #对行索引
print A[2][2] #对行和列索引
print A[2, 1] #也可这样对行和列索引
print A[1, 0:2] #也可切片索引
for row in A:
print row #这样迭代的时每一行
for column in A.T:
print column #迭代列
print A.flatten() #此函数返回一个将矩阵拆分的数列所以可以用类似的方法迭代矩阵中的每个元素
for item in A.flat:
print item:

numpy矩阵合并

  • 合并的矩阵维度都是相同的(中括号的数量是相同的)
  • np.vstack((A, B))用于快速合并上下合并,np.hstack((A, B))用于快速左右合并
  • 只有一个大括号的矩阵可以用A[:, np.newaxis]增加维度,这其实是个索引符号,不改变原来的矩阵
  • np.concatenate((), axis = o or 1)可自由合并axis = 0表示对列进行操作所以是上下合并
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
A = np.ones((1, 3))
B = np.zeros((1, 3))
print np.vstack((A, B)) #vertical stack上下合并
C = np.vstack((A, B))
print A.shape, C.shape
D = np.hstack((A, B)) #horizontal stack左右合并
print D, '\n', D.shape
E = np.array([1, 1, 1]) #这样生成的是个数组不是数列print出的只有一个中括号,有的方法得到的是有两层嵌套的矩阵而不是数列
F = np.array([2, 2, 2])
'''也可写成E = np.array([1, 1, 1])[np.newaxis, :],可生成一个带一个中括号的array后增加维度后合并,合并的两个矩阵都是两个括号的,在外层大括号下,突破内层大括号。'''
print E[np.newaxis, :] #向下增加维度
print F[:, np.newaxis] #向右增加维度
G = np.vstack((A, B))
print G
H = np.concatenate((E, F, F, A), axis=0) #axis = 0 表示上下合并

矩阵分割

  • 用np.split(A, 2, axis = 0 or 1)等量分割参数分别为要分割的矩阵和分成的快数,分割的方向
  • np.array_split(...)参数都一样不过分不了的会分成不等的几份
  • 快速分割vsplit(A, 2)参数为矩阵和快数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
A = np.arange(12).reshape((3, 4))
print A

print np.split(A, 2, axis = 1)
'''split函数参数:矩阵,快数,方向'''
#此函数不能实现不等量分割
#print np.split(A, 3, axis = 1)会报错
'''实现不等分割'''
print np.array_split(A, 3, axis = 1)
'''快速分割'''
print np.vsplit(A, 3) #横向分割
print np.hsplit(A, 4) #纵向分割

numpy的cope与deep copy

  • 普通的赋值只是得到了原矩阵的一个引用A.copy()返回了一个新的与元矩阵不再同一地址的矩阵
1
2
3
4
5
6
7
8
9
10
import numpy as np
a = np.arange(4)
b = a
c = a
d = b
print a, b, c, d
a[0] = 11
print a, b, c, d #b, c, d都是指向a指向的空间当a变时b, c, d也变了。和list是一样的
b = a.copy() #deep copy,将a的值附过去但a,b指向的不是一块空间不会相互影响

作者

ฅ´ω`ฅ

发布于

2017-10-07

更新于

2019-11-18

许可协议


评论