Here is the tutorial of python’s numpy.
基本用法
1 | import numpy as np |
对数组的处理
1 | a = np.arange(10,20,2) |
基本属性
a.ndim #数组的维数
a.shape #数组每一维的大小
a.size #数组全部元素的数量
a.dtype #数组中元素的类型
a.shape #返回具体的维度
print a.itemsize #每个元素所占的字节数
1 | b = np.arange(1,10) |
numpy 的基本运算
1 | a = np.array([10,9,8]) |
通过索引找元素
1 | a = np.arange(3,15).reshape((3,4)) |
合并
1 | a = np.array([1,1,1]) |
分割
numpy 的分割和 python 自带的切片不一样。
1 | a = np.arange(12).reshape((3,4)) |
小技巧
1
在 python 中下面的句子是不成立的。
1 | a = [0 , 1] |
但是在 numpy 中这种语句是成立的,比如
1 | import numpy as np |
在 numpy 中,我们可以看到,第一它们的数据类型并不是列表,也就是没有逗号,第二,他们都是 numpy 的数据类型。
这一点技巧很重要,因为它可以直接换取局部数值。
1 | import numpy as np |
上面的小技巧交给我们如何直接局部值。非常重要,装逼必备。
2
我们知道用 numpy 创造的数据是矩阵,而矩阵的特性是和 python 的那些数据类型不一样的,比如,它可以直接比较,如下面的装逼必备代码。
1 | import numpy as np |
3 取反
1 | import numpy as np |
4 直接改变 list 元素
1 | v = np.array([1,2,3,4]) |
numpy 支持的数据类型
bool_ 以字节存储的布尔值(True 或 False)
int_ 默认的整数类型(和 C 的 long 一样,是 int64 或者 int32)
intc 和 C 的 int 相同(一般为 int64 或 int32)
intp 用于下标的整数(和 C 的 ssize_t 相同,一般为int64 或者 int32)
int8 字节(-128 到 127)
int16 整数(-32768 到 32767)
int32 整数(-2147483648 到 2147483647)
int64 整数(-9223372036854775808 到 9223372036854775807)
uint8 无符号整数(0 到 255)
uint16 无符号整数(0 到 65535)
uint32 无符号整数(0 到 4294967295)
uint64 无符号整数(0 到 18446744073709551615)
float_ float64 的简写
float16 半精度浮点:1位符号,5位指数,10位尾数
float32 单精度浮点:1位符号,8位指数,23位尾数
float64 双精度浮点:1位符号,11位指数,52位尾数
complex_ complex128 的简写
complex64 由两个32位浮点(实部和虚部)组成的复数
complex128 由两个64位浮点(实部和虚部)组成的复数
术语解析
array_like 和 iterable
术语“array-like”确实仅在NumPy中使用,并且是指可以作为第一个参数传递给numpy.array()的任何东西来创建数组。
术语“iterable”是标准的python术语,是指可以迭代的任何东西(例如,在可迭代中使用x)。
大多数类似数组的对象是可迭代的,除了标量类型。
许多迭代不是数组的 – 例如,您不能使用numpy.array()从生成器表达式构造NumPy数组。 (您将不得不使用numpy.fromiter(),但是在NumPy文档的术语中,生成器表达式不是“类似数组”)。
在项目中 numpy 究竟是如何处理数据的
numpy 的数据类型是向量和矩阵。
所以,处理起来要转变思维,因为它有时候并不是一个单独的向量,而是很多向量聚在一起的矩阵,相当于处理多维数组。
但是,相较于 python 处理多维数组,在 numpy 中处理矩阵的代码就好像是在处理一维数组一样。
思维,一定要转变。