Python中的numpy模块简述

numpy概述
numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

一,ndarray数组

1,ndarray数组创建:

1>使用array函数创建:
将输入数据(列表,元组,数组或其他序列类型转换为ndarray,可以指定dtype类型)

# 使用默认创建一个array数组
array = numpy.array([[1, 2, 3],[2, 3, 4]])

# 指定dtype类型
a = np.array([2, 3, 5], dtype=numpy.int64)
b = np.array([4, 5, 6], dtype=numpy.float)

2>使用zeros和ones函数直接得到全部为0和1矩阵

zero_test = np.zeros((3,4), dtype=int)
print(zero_test)

ones_test = np.ones((4,4), dtype=int)
print(ones_test)

3>获取随机元素 设置行列数
arange函数和Python自带的range函数类似,只不过不是创建的序列而是一个array数组

range_test = np.arange(12).reshape(3,4)

4>分段获取一个矩阵

line_test = np.linspace(1, 10, 20, dtype=float).reshape(10, 2)
print(line_test)

2,基本属性访问:

# 访问 维数
print('number of dim:', array.ndim)
# 访问 行列数
print('shape:', array.shape)
# 访问 多少个元素
print('size:', array.size)

二,矩阵的基本运算:

a = np.array([[12, 334, 5],[23, 34, 56],[2, 35, 54]],dtype=int)
b = np.array([[234, 325, 445],[32, 54, 56],[32, 55, 67]],dtype=int)

1,加减法和三角函数

c = a + b
c = a - b
d = b**2
e = 10*np.sin(a)
f = 10*np.tan(a)

2,矩阵的乘法:

1>逐个相乘:

test = a * b

2>矩阵的乘法

# 第一种写法
test_dot = np.dot(a, b)
#第二种写法
test_dot_two = a.dot(b)

3,矩阵元素

先随机获取一个矩阵:

array = np.random.random((2, 4))

1>矩阵元素求和,行求和和列求和
将每一行所有元素加起来返回一个新的矩阵

print(np.sum(array, axis=1))

将每一列所有元素加起来返回一个新的矩阵

print(np.sum(array, axis=0))

注:参数axis是1对行操作,是0对列操作
2> 求最每一行或者每一列最小元素,并且返回一个新矩阵

# 求每一列最小元素的值
print(np.min(array, axis=0))
# 求每一行最小元素的值
print(np.min(array, axis=1))

3> 求最每一行或者每一列最大元素,并且返回一个新矩阵

# 求每一行最大元素的值
print(np.max(array, axis=1))
# 求每一列最大元素的值
print(np.max(array, axis=0))

4>将两个相同行数矩阵并起来
如下:

A = np.arange(2, 18).reshape((4, 4))
B = np.arange(16).reshape((4, 4))

print(np.concatenate((A, B), axis=1))

5>求出矩阵的平均值

# 平均值 可以指定对行或者列进行计算

print(np.mean(A, (1, 6)))
print(A.mean())
print(np.average(A))

6>获取中位数

# 中位数
print(np.median(A))

7>逐渐累加
注:举例第二个元素就是第一个元素加上第二个元素,第三个元素就是第一个元素加上第二个元素在加上第三个元素,以此类推。

print(np.cumsum(A))

8>矩阵的转置:

# 求矩阵的转置(行变列列变行)
print(np.transpose(B))
print(B.T)

print((B.T).dot(B))

9>clip功能

# clip功能 小于的变为最小值,大于的变为最大值 中间保持不变

print(np.clip(A, 5, 9))

4,矩阵索引值

先获取一个矩阵

A = np.arange(2, 18).reshape((4, 4))

1>获取最值索引

# 最小值
print(np.argmin(A))
# 最大值
print(np.argmax(A))

2>利用索引访问矩阵

# numpy的索引 根据索引分析矩阵
C = np.arange(2, 38).reshape(6, 6)
print(C)
print(C[3][2])
print(C[3, 2])
# 整体行数和列数
print(C[3:])
print(C[:1])

3>使用for循环和转置整行整列访问矩阵

# 每一行每一行访问
print("row")
for row in C:
    print(row)
# 每一列每一列访问
print('cloum')
for cloumn in C.T:
    print(cloumn)

4>使用flatten函数将矩阵编程一个一维矩阵,使用item逐个输出元素

print(C.flatten())

for item in C.flat:
    print(item)

3,其他

1>,矩阵和别的number比较大小

# 判断元素是否小于100是则true否则false
print(b < 100)

2>获取一个范围为[0, 1)随机矩阵

# 随机矩阵
array = np.random.random((2, 4))
print(array)

三,array的其他操作

1,矩阵的合并

1>两个矩阵合并

# array合并 上下合并

A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
# 垂直方向合并
D = np.vstack((A, B))
# 水平方向合并
E = np.hstack((A, B))

print(D)
print(E)

2>多个矩阵合并

# 多个array纵向横向合并 

C = np.concatenate((A, B, B, A), axis=0)

注:axis = 0 表示垂直方向 axis =1 表示水平方向

2,矩阵的分割:

1>等量分割

A = np.arange(12).reshape(3,4)
print(A)
# 垂直分割
print(np.split(A, 3, axis=0))
# 水平分割
print(np.split(A, 4, axis=1))

注:
垂直方向分割的时候,行数和份数要求倍数关系。
水平方向分割的时候,列数和份数要求倍数关系。

2>不等量分割

# 实现不等量的分割
print(np.array_split(A, 2, axis=0))

一般情况·下,分割的矩阵是先量多再量少

上一篇:python之pandas处理缺失值


下一篇:python-数据分析-(5)numpy常用操作