NumPy 基础入门
来源:互联网 发布:淘宝怎样隐藏订单 编辑:程序博客网 时间:2024/05/29 14:01
NumPy 基础入门
# 来源:NumPy Biginner's Guide 2e ch2>>> from numpy import *
多维数组
# 创建多维数组>>> m = array([arange(2), arange(2)])>>> marray([[0, 1], [0, 1]])# 打印形状>>> m.shape(2, 2)# 创建 2x2 的矩阵>>> a = array([[1,2],[3,4]])>>> aarray([[1, 2], [3, 4]])# 读取矩阵的每个元素>>> a[0,0]1>>> a[0,1]2>>> a[1,0]3>>> a[1,1]4
数值类型
bool
布尔值,一位 int
平台相关整数,int32
或int64
int8
字节(-128 ~ 127
) int16
整数(-32768 ~ 32767
) int32
整数(-2 ** 31 ~ 2 ** 31 - 1
) int64
整数(-2 ** 63 ~ 2 ** 63 - 1
) uint8
无符号整数(0 ~ 255
) uint16
无符号整数(0 ~ 65535
) uint32
无符号整数(0 ~ 2 ** 32 - 1
) uint64
无符号整数(0 ~ 2 ** 64 - 1
) float16
半精度浮点,符号位,5 位指数,10 位尾数 float32
单精度浮点,符号位,8 位指数,23 位尾数 float64
或float
双精度浮点,符号位,11 位指数,52 位尾数 complex64
复数,由两个 32 位浮点表示(实部和虚部) complex128
或complex
复数,由两个 64 位浮点表示(实部和虚部)# 每个数据类型都可用作转换函数>>> float64(42)42.0>>> int8(42.0)42>>> bool(42)True>>> bool(0)False>>> bool(42.0)True>>> float(True)1.0>>> float(False)0.0# 复数转整数会抛出错误>>> int(42.0 + 1.j)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: can't convert complex to int
数据类型对象(dtype)
# 从数值类型构造>>> dtype(float)dtype('float64')# 从字符代码构造>>> dtype('f')dtype('float32')>>> dtype('d')dtype('float64')# 从双字符代码构造>>> dtype('f8')dtype('float64')# 获取所有字符代码>>> sctypeDict.keys()[0, … 'i2', 'int0']# char 属性获取字符代码>>> t = dtype('Float64')>>> t.char'd'# type 属性获取类型>>> t.type<type 'numpy.float64'># str 属性获取完整字符串表示# 第一个字符是字节序,< 表示小端,> 表示大端,| 表示平台的字节序>>> t.str'<f8'# 获取大小>>> t.itemsize8# 许多函数拥有 dtype 参数# 传入数值类型、字符代码和 dtype 都可以>>> arange(7, dtype=uint16)array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)
bool
?
, b1
int8
b
, i1
uint8
B
, u1
int16
h
, i2
uint16
H
, u2
int32
i
, i4
uint32
I
, u4
int64
q
, i8
uint64
Q
, u8
float16
f2
, e
float32
f4
, f
float64
f8
, d
complex64
F4
, F
complex128
F8
, D
str
S
(可以在S
后面添加数字,表示字符串长度,比如S3
表示长度为三的字符串,不写则为最大长度) unicode
U
object
O
void
V
记录类型
# 定义记录类型# dtype 传入字段列表,字段用名称和类型表示>>> t = dtype([('name', str_, 40), ('numitems', int32), ('price', float32)])>>> tdtype([('name', '|S40'), ('numitems', '<i4'), ('price','<f4')])# 获取字段>>> t['name']dtype('|S40')# 使用记录类型创建数组# 否则它会把记录拆开>>> itemz = array([('Meaning of life DVD', 42, 3.14), ('Butter', 13,2.72)], dtype=t)>>> itemz[1]('Butter', 13, 2.7200000286102295)
操作形状
>>> b = array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])# ravel 将数组展开,创建视图>>> b.ravel()array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14, 15, 16, 17, 18, 19, 20, 21, 22, 23])# flatten 将数组展开,创建副本>>> b.flatten()array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14, 15, 16, 17, 18, 19, 20, 21, 22, 23])# reshape 用于设置数组形状# 总数必须一致>>> b.shape = (6,4)>>> barray([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]])# 用于转置矩阵>>> b.transpose()array([[ 0, 4, 8, 12, 16, 20], [ 1, 5, 9, 13, 17, 21], [ 2, 6, 10, 14, 18, 22], [ 3, 7, 11, 15, 19, 23]])# resize 用于原地设置形状# 其它和 reshape 相同>>> b.resize((2,12))>>> barray([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])
堆叠
>>> a = arange(9).reshape(3,3)>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])>>> b = 2 * a>>> barray([[ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])# 二维数组的轴# 0:竖直,1:水平# 三维数组的轴# 0:纵深,1:竖直,2:水平# 水平堆叠>>> hstack((a, b))array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])# 也可以使用 concatenate,指定轴 1(二维数组的水平轴)>>> concatenate((a, b), axis=1)array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])# 竖直堆叠>>> vstack((a, b))array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])# 也可以使用 concatenate,指定轴 0(二维数组的数值轴,默认值)>>> concatenate((a, b), axis=0)array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])# 纵深堆叠# 沿第三个轴(深度)堆叠>>> dstack((a, b))array([[[ 0, 0], [ 1, 2], [ 2, 4]], [[ 3, 6], [ 4, 8], [ 5, 10]], [[ 6, 12], [ 7, 14], [ 8, 16]]])# 按列堆叠# 对于一维数组,column_stack 使一维数组变成二维数组的列>>> oned = arange(2)>>> onedarray([0, 1])>>> twice_oned = 2 * oned>>> twice_onedarray([0, 2])>>> column_stack((oned, twice_oned))array([[0, 0], [1, 2]])# 对于二维数组,就是 hstack>>> column_stack((a, b))array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])>>> column_stack((a, b)) == hstack((a, b))array([[ True, True, True, True, True, True], [ True, True, True, True, True, True], [ True, True, True, True, True, True]], dtype=bool)# 按行堆叠# 对于一维数组,row_stack 使一维数组变成二维数组的行>>> row_stack((oned, twice_oned))array([[0, 1], [0, 2]])# 对于二维数组,就是 vstack>>> row_stack((a, b))array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])>>> row_stack((a,b)) == vstack((a, b))array([[ True, True, True], [ True, True, True], [ True, True, True], [ True, True, True], [ True, True, True], [ True, True, True]], dtype=bool)
分割
>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])# 水平分割,指明分割为多少块# 不能均分时报错>>> hsplit(a, 3)[array([[0], [3], [6]]), array([[1], [4], [7]]), array([[2], [5], [8]])]# 也可以使用 split 函数指定轴 1(二维数组的水平轴)>>> split(a, 3, axis=1)[array([[0], [3], [6]]), array([[1], [4], [7]]), array([[2], [5], [8]])]# 竖直分割,指明分割为多少块# 不能均分时报错>>> vsplit(a, 3)[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7,8]])]# 也可以使用 split 函数指定轴 0(二维数组的竖直轴)>>> split(a, 3, axis=0)[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7,8]])]# 纵深分割# 我们需要一个三维数组>>> c = arange(27).reshape(3, 3, 3)>>> carray([[[ 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]]])>>> dsplit(c, 3)[array([[[ 0], [ 3], [ 6]], [[ 9], [12], [15]], [[18], [21], [24]]]), array([[[ 1], [ 4], [ 7]], [[10], [13], [16]], [[19], [22], [25]]]), array([[[ 2], [ 5], [ 8]], [[11], [14], [17]], [[20], [23], [26]]])]
属性
# ndim 获取数组维度>>> barray([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])>>> b.ndim2# size 获取元素数量>>> b.size24# itemsize 获取元素大小>>> b.itemsize8# 这两个乘起来就是数组的大小 nbytes>>> b.nbytes192>>> b.size * b.itemsize192# T 属性用于获取转置,和 tranpose 函数一样>>> b.resize(6,4)>>> barray([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]])>>> b.Tarray([[ 0, 4, 8, 12, 16, 20], [ 1, 5, 9, 13, 17, 21], [ 2, 6, 10, 14, 18, 22], [ 3, 7, 11, 15, 19, 23]])# 但如果数组是一维的,我们只能得到它的视图>>> b.ndim1>>> b.Tarray([0, 1, 2, 3, 4])# NumPy 中的复数用 j 表示>>> b = array([1.j + 1, 2.j + 3])>>> barray([ 1.+1.j, 3.+2.j])>>> b.dtypedtype('complex128')>>> b.dtype.str'<c16'# real 用于获取实部>>> b.realarray([ 1., 3.])# imag 用于获取虚部>>> b.imagarray([ 1., 2.])# flat 属性获取 numpy.flatiter 对象,它是一个迭代器,用于遍历所有元素>>> b = arange(4).reshape(2,2)>>> barray([[0, 1], [2, 3]])>>> f = b.flat>>> f<numpy.flatiter object at 0x103013e00>>>> for item in f: print item0123# 也可以直接索引 flatiter 对象>>> b.flat[2]2# 或者多个元素>>> b.flat[[1,3]]array([1, 3])# flat 属性是可设置的,修改 flat 属性的值会修改原始数组# 设置所有元素>>> b.flat = 7>>> barray([[7, 7], [7, 7]])# 或者仅仅设置某个元素>>> b.flat[[1,3]] = 1>>> barray([[7, 1], [7, 1]])
转换
# 转换为 Python 列表>>> barray([ 1.+1.j, 3.+2.j])>>> b.tolist()[(1+1j), (3+2j)]# astype 转换数组中的元素类型# 复数转为整数时会丢掉虚部>>> barray([ 1.+1.j, 3.+2.j])>>> b.astype(int)/usr/local/bin/ipython:1: ComplexWarning: Casting complex values to real discards the imaginary part #!/usr/bin/pythonarray([1, 3])
阅读全文
0 0
- NumPy基础入门学习
- NumPy 基础入门
- NumPy 基础入门
- 03 Numpy基础入门
- numpy入门——基础运算
- numpy基础入门-多维数组对象
- Numpy 入门
- numpy入门
- Numpy入门
- numpy:入门
- Numpy 基础
- Numpy 基础
- Numpy:基础
- numpy基础
- Numpy基础
- numpy基础
- NumPy 基础
- Numpy基础
- 解决继承SwitchPreference后丢失动画的问题
- 【编程题】调整红白蓝三色
- 考研数学笔记 61~65
- 流媒体/流媒体文件格式详解
- commons-beanutils的小例子
- NumPy 基础入门
- 100层高的大楼,丢玻璃球的问题
- memcached初学总结
- NullPointException 利器 Kotlin 可选型
- Java并发编程与技术内幕:线程池深入理解
- dovecot+mariadb
- Android Studio 接入OpenCV 3.2.0 并不使用OpenCV_Manager_3.2.0的APK包来进行图像处理
- 信号高级特性
- 后台传来毫秒格式日期换成年月日时分秒显示在前台