前言
Numpy100训练,简单Summary下
原始地址:github
小结
np常用function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#info函数,查看函数使用方法,近help()
np.info("add")
#日期相关
today = np.datetime64('today', 'D')
yesterday = today - np.timedelta64(1, 'D')
tomorrow = today + np.timedelta64(1, 'D')
np.arange('2019-06', '2019-07', dtype='datetime64[D]') #得到2019-06到2019-07所有日期
#定义迭代函数
def generate():
for x in range(10):
yield x
Z = fromiter(generate(), dtype=float, count=-1)
#读取序号和内容
for index, x in np.ndenumerate(Z):
print (index, x)
for index in np.ndindex(Z.shape):
print (index, Z[index])
#构建迭代函数
A = np.arange(3).reshape(1, 3)
B = np.arange(3).reshape(3, 1)
it = np.nditer([A, B, None])
for x,y,z in it:
z[...] = x + y
print (it.operands[2])
Array初始化方法
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
27
28
29
import numpy as np
#全0数组
np.zeros(10)
#全1数组
np.ones(10)
#其他常量赋值
np.ones(10)+1
#arange赋值
np.arange(10,49,1)
#随机数赋值
np.random.random((3,3,3))
#randint范围:[0,10)
np.random.randint(0, 10, 10)
np.random.uniform(0, 10, 10)
#生成对角矩阵:np.arange(4)为对角元素,k表示偏移
np.diag(np.arange(4), k=-1)
#生成dtype类型
a = np.dtype([('R', np.ubyte, 1),
('G', np.ubyte, 1),
('B', np.ubyte, 1),
('A', np.ubyte, 1)])
#参数:key,type,shape
Z = np.ones(10, [('position', [('x', float, 1),
('y', float, 1)]),
('color', [('r', int, 1),
('g', int, 1),
('b', int, 1)])])
#生成等间隔矩阵
Z = np.linspace(0, 1, 11, endpoint=False) #默认包含start,end
常规的属性方法
1
2
3
4
5
6
7
8
#得到矩阵成员数目以及字节数
Z = np.zeros((10, 10))
print ("size:%d" % (Z.size)) #100
print ("itemsize:%d" % (Z.itemsize)) #8
#设置只读属性
Z.flags.writeable=False
#属性转换
Z = Z.astype(dtype=int32, copy=False)
常规的数值方法
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
#得到非零元素index
Z = np.random.randint(0, 10, 10)
A = np.nonzero(Z)
#常见数学方法
Z = np.random.randint(0, 10, 10)
print ("the max value: %f" % Z.max())
print ("the min value: %f" % Z.min(Z))
print ("the mean value: %f" % Z.mean(Z, axis=1, keepdims=True))
print ("the sum value: %f" % np.sum(Z))
print ("the sqrt value: %f" % np.sqrt(Z))
print ("the arctan value: %f" % np.arctan2(A, Z))
print ("the position of min value: %f" % Z.argmin())
print ("the position of sorted value: %f" % Z.argsort())
Z = np.random.uniform(-10, 10, 10)
print (np.round(Z))
print (np.copysign(np.ceil(np.ab(fs(a))), a)
#引入虚数
print (np.emath,sqrt(-1)) #1j
#取整的五种方法(向下)
Z = np.random.uniform(0, 10, 10)
print (Z - Z%1)
print (floor(Z))
print (trunz(Z))
print (ceil(Z)-1)
print (Z.astype(int))
常规的Array操作方法
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#reverse操作
Z = np.arange(1, 10, 1)
print (Z[::-1])
#reshape操作
Z = np.reshape(np.arange(0, 9), (3,3))
#pad操作:外围绕一圈为0的框
np.pad(Z, 1, 'constant', constant_values=0)
#得到矩阵第n个元素对应的位置:如(6,7,8)维矩阵的第100个元素
np.unravel_index(100, (6,7,8)) #(1, 5, 4):100=1*7*8+8*4+4
#tile函数生成棋盘
A = np.array([[0,1],[1,0]])
Z = np.tile(A, (4,4))
#点积函数
a = np.random.random((5, 3))
b = np.random.random((3, 2))
z = np.dot(a, b)
#取两个矩阵的共同元素
a = np.random.randint(0, 10, 10)
b = np.random.randint(0, 10, 10)
z = np.intersectld(a, b)
#加减乘除
A = np.ones(3)*1
B = np.ones(3)*2
C = np.ones(3)*3
np.add(A, B, out=B)
np.negative(A, out=A)
np.divide(A, 2, out=A)
np.multiply(A, B, out=A)
np.add.reduce(A) #对于小numpy数组加运算速度比sum更快,原因在于其本身sum本身也需要条用add.reduce函数,节省了处理参数和调度的时间
#比较矩阵大小:allclose默认shape一致,比较两者的values,会设置一个差值阈值
#array_equal:会检查shape和value全部是否一致,且不设置阈值,需要value值完全一致
equal = np.allclose(A, B)
equal = np.array_equal(A, B)
#生成棋盘矩阵
Z = np.ones((5, 5), [('x',float),('y',float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0, 1, 5), np.linspace(0, 1, 5))
#计算行列式
print(np.linalg.det(C))
#矩阵逐个加法
X = np.arange(8)
Y = X + 0.5
C = np.subtract.outer(X, Y)
#随机替换元素
#p:放置元素数目,放置数为1
pos = np.random.choice(range(n*n), p, replace=False)
np.put(Z, pos, 1)
#在对应位置进行叠加
Z = np.ones(10)
I = np.random.randint(0, len(Z), 5)
np.add.at(Z, I, 1)
#根据对应index进行累加
X = [1,2,3,4,5,6]
I = [1,1,3,4,5,6]
#I为X->F的序号映射,同序号相加
F = np.bincount(I,X)