import numpy as np
'''
一.算术运算
元素级
1.标量 加减乘除 数组(元素级:位置对应) 自增和自减 通用函数
2.数组 +-*/ 数组 (元素级)
3.条件和布尔运算 a>0.5 满足的True,不满足False a[a>0.5]:满足条件的组成新的数组
非元素级
1.矩阵的积 dot(A,B) A.dot(B)
2.聚合函数 【求和:a.sum(),最值:a.max(),平均值:a.mean(),标准差:a.std()】
二.数组操作
1.连接数组【同矩阵类似】
1.1垂直扩展(入栈) vstack(A,B)
1.2水平扩展(入栈) hstack(A,B)
2.数组切分
2.1垂直切分 vsplit()
2.2水平切分 hsplit()
2.3 np.split(H,(1,3),axis=0) split切分,需要指定轴
三.常用概念
1.副本或视图:数组运算 和 操作 返回的不是副本就是视图 但是赋值运算不会创建副本【a b = a b在运用时时在调用a,没有副本,所以a改变了,b的调用值夜改变】可以用copy()创建副本
2.向量化
3.广播机制 【数组兼容:两数组的每一维等长或者其中一个数组是一维的】【两原则:1.缺失的维度补上1 2.较小数组扩充维度,使之与大数组维度相同】
4.结构化数组
5.数组文件的读写
'''
A = np.zeros((3,3)) ##3行3列
B = np.ones((2,3)) ##2行3列
C = np.transpose(B) ##转置
D = np.vstack((A,B))
E = np.hstack((A,C))
F = np.transpose((D))
H = np.vstack((E,F))
##1.1垂向入栈
print(D)
'''
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[1. 1. 1.]
[1. 1. 1.]]
'''
##1.2横向入栈
print(E)
'''
[[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]]
'''
print(H)
'''
[[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]
[0. 0. 0. 1. 1.]]
'''
##2.1垂直切分 np.vsplit(H,2)均分为两部分
[A1,A2,A3] = np.vsplit(H,(1,3)) ## 按行索引1,3,分开,分成3部分
print(A1)
print(A2)
print(A3)
##2.2水平切分
[B1,B2,B3] = np.hsplit(H,(1,3)) ## 按列索引1,3,分开,分成3部分
print(B1)
print(B2)
print(B3)
##2.3 np.split(H,(1,3),axis=0) split切分,需要指定轴
### 广播机制
a = np.arange(16).reshape((4,4))
b = np.arange(4)
print(a.shape)
print(b.shape)
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[0 1 2 3]
(4, 4)
(4,) 为缺失的维度补上1 (4,1)
'''
c = a+b
print(c)
'''
[[ 0 2 4 6]
[ 4 6 8 10]
[ 8 10 12 14]
[12 14 16 18]]
一维数组+二维数组,其中一个数组是一维,满足兼容条件。可以应用广播机制。
第二个原则:缺失元素都用已有元素填充
[0,1,2,3]
填充后
[[0,1,2,3]
[0,1,2,3]
[0,1,2,3]
[0,1,2,3]]
'''
###两个数组形状和维度不同
m = np.arange(6).reshape(3,1,2)
n = np.arange(6).reshape(3,2,1)
print(m)
print(n)
print(m+n)
'''
[[[0 1]]
[[2 3]]
[[4 5]]]
[[[0]
[1]]
[[2]
[3]]
[[4]
[5]]]
m数组:第二维1 扩充到2 已有元素填充
[[[0 1],[[0 1]]
[[2 3],[2 3]]
[[4 5],[4 5]]]
n数组 :第3维 1 扩充到2 已有元素填充
[[[0,1],[1,1]]
[[2,2],[3,3]]
[[4,4],[5,5]]]
m+n:
[[[ 0 1],[ 1 2]]
[[ 4 5],[ 5 6]]
[[ 8 9],[ 9 10]]]
'''