@Channelchan
2018-03-21T20:53:04.000000Z
字数 2387
阅读 54316
numpy
属性: 形状,数量...
import numpy as np
a = np.arange(9).reshape(3, 3)
print(a)
[[0 1 2]
[3 4 5]
[6 7 8]]
# 数组的维度 m*n
print(a.shape)
(3, 3)
# 数组轴的个数
print(a.ndim)
2
b = np.arange(27).reshape(3, 3, 3)
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]]]
print(b.ndim)
3
# 数组元素的总个数
print(b.size)
27
# 一个用来描述数组中元素类型的对象
print(b.dtype)
int32
array, zeros, ones
# array([])创建数组
c = np.array([1,2,3,4,5])
print(c.dtype)
int32
# 转换数组中元素的类型
d = np.array([1,2,3,4,5], dtype='float64')
print(d.dtype)
float64
# 创建数值为0的数组
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的数组
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.]]]
数组运算,常用函数。
数组运算
e = np.array([20,30,40,50])
f = np.arange(4)
print(e-f)
[20 29 38 47]
print(e*2)
[ 40 60 80 100]
# 返回输入数量的等比间隔,linspace(start, stop, num=50)
g = np.linspace(0,np.pi,3)
常用函数
# 求和
print(g.sum())
4.71238898038
# 累加
print(g.cumsum())
[ 0. 1.57079633 4.71238898]
# 对数
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
# 指数
print(np.exp(g))
[ 1. 4.81047738 23.14069263]
# 开方
print(np.sqrt(g))
[ 0. 1.25331414 1.77245385]
print(a)
[[0 1 2]
[3 4 5]
[6 7 8]]
print(a[:, 1])
[1 4 7]
print(a[1, :])
[3 4 5]
print(a[a>3])
[4 5 6 7 8]
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]]]
print(b[-1][-1][-1])
26
print(b[1:])
[[[ 9 10 11]
[12 13 14]
[15 16 17]]
[[18 19 20]
[21 22 23]
[24 25 26]]]
# 迭代
for row in b[0][0]:
print(row)
0
1
2
# flat数组元素迭代器
for element in b.flat:
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
# 将多维数组降位一维
print(a.ravel())
[0 1 2 3 4 5 6 7 8]
a1 = np.array([9,10,11])
# 横向添加数组
a2 = np.vstack((a,a1))
print(a2)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
# 不改变原有数组
print(a2.reshape(2,6))
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
# 改变原有数组
a2.resize(2,6)
print(a2)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
# 转变形状
print(a2.transpose())
[[ 0 6]
[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]]
print(a2)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
# 垂直切分
print(np.hsplit(a2,3))
[array([[0, 1],
[6, 7]]), array([[2, 3],
[8, 9]]), array([[ 4, 5],
[10, 11]])]
# 生成对角矩阵
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的行。
A = np.array([
[1, 2],
[4, 5],
[7, 8]
])
B = np.array([
[4, 4, 2],
[2, 3, 1],
])
print(np.dot(A, B))
[[ 8 10 4]
[26 31 13]
[44 52 22]]
矩阵与逆矩阵相乘为 [[1,0][0,1]]
A=np.array([[2,1],[1,-2]])
# 计算逆矩阵
A_=np.linalg.inv(A)
print(A)
print(A_)
print(np.dot(A,A_))
[[ 2 1]
[ 1 -2]]
[[ 0.4 0.2]
[ 0.2 -0.4]]
[[ 1. 0.]
[ 0. 1.]]
b=np.array([[1],[1]])
z=np.dot(A_,b)
print(z)
[[ 0.6]
[-0.2]]