#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 14 11:18:09 2018
@author: v_cuiguang
numpy数据类型
1. 内置类型
布尔型 bool_ : True/False
整型 有符号: int8 /int16 /int36/int64
无符号: uint8/uint16/uint36/uint64
复数型:complex64 / complex128
浮点型:float16 / float32/ float 64
字符串: str_
2. 复合数组 (数组中元素同质,即相同类型)
由多个相同或不同类型的字段组合而成的类型
np.array(...,dtype=复合类型)
a = [[1,2,3],[4,5,6]]
创建数组: b= np.array(a)
返回数据类型: b.dtype == type(b[0][0])
返回数组纬度: b.shape 返回一个元组
元素类型转换: c= b.astype(数据类型)
访问数组中元素: 数组[页标][行标][列标]
3. 类型字符码
bool_ :?
有符号整型: i1/2/4/8
无符号整型: u/1/2/4/8
浮点型: f2/4/8
复数型: c8/16
字符串: U<字符数>
日期时间: M
字节序(针对多字节整型) : </ >/ [=] 表示大端/小端/硬件默认顺序
4. 切片
# 以三维数组为例,
# 页切片 行切片 列切片
数组[起始:终止:步长,起始:终止:步长,起始:终止:步长,]
b=
[[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]]
b[:,0,0] # 表示取 全部页的第一行,第一列
b[0,;,;] # 表示取第一页的全部数据
b[0,...] # 作用同上
b[...,1] # 所有页,所有行的第二个元素
5. 变维
元数据:对数组的描述
实际数据:数组的内容
1. 视图变维: 元数据独立,实际数据共享
数组.reshape(新维度) -> 新数组
2. 复制变维: 元数据和实际数据都独立
数组.flatten() -> 一维数组
# 元素数和维度数必须匹配
数组.ravel() -> 一维数组
3. 就地变维: 修改元数据的纬度信息,不产生新的数组
数组.shape = 新维度
数组.resize(新维度)
6. 垂直组合:沿着垂直方向组合两个小的同维数组为一个大数组(行)
# 二维数组
np.vstack((上,下))
np.concatenate((上,下),axis=0)
axis - 轴向,用维度的下标表示 0(纵向)/1(横向)
水平组合: 沿水平方向组合两个小的同维数组为一个大数组
# 二维数组
np.hstack((左,右))
np.concatenate((左,右),axis=1)
深度组合: 沿着纵深方向组合两个小的同维数组为一个大数组
# 三维数组
np.dstack((前,后))
行组合:以两个一维数组按照行的防护组合成一个二维数组
np.row_stack((上,下))
列组合:以两个一维数组按照列的方式组合成一个二维数组
np.coluwn_stack((左,右))
垂直拆分 : 将一个大的数组沿着垂直方向拆分成若个小的同维数组
np.vsplit(被拆分的数组,拆分份数)
np.split(被拆分的数组,拆分份数,axis=0)
水平拆分: 将一个大的数组沿水平方向拆分成若个小的同维数组
np.hsplit(被拆分的数组,拆分份数)
np.split(别拆分数组,拆分份数,axis=1)
深度拆分: 将一个大的数组沿着纵深方向拆分成若个小的同维数组
np.dsplit(被拆分数组,拆分份数)
7. ndarry 的属性
dtype - 元素的数据类型
shape - 数组的纬度
ndim - 数组的维数,len(shape)
size - 数组的元素数, shape中元素相乘
itemsize - 元素字节数,与dtype相关
nbtyes - 总司结束, size * itemsize
T - 转置视图
real - 复数数组的实部视图
imag - 复数数组的虚部视图
flat - 迭代扁平器
8. 列表 与 数组的 互相转换
np.array(列表) -> 数组
数组.tolist() -> 列表
9. 浅拷贝
b = [[1],[2,3],4,5]
a = b
深拷贝
c = b.copy()
"""