Numpy的基本运算及操作

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]]]
'''

猜你喜欢

转载自www.cnblogs.com/liuhuacai/p/11582026.html