美文网首页Numpy学习笔记
Numpy官方指南学习笔记(1)

Numpy官方指南学习笔记(1)

作者: koolo | 来源:发表于2018-10-01 18:37 被阅读0次

基础:

  • Numpy是基于齐次多维数组(homogeneous multidimensional array)的, 是相同类型元素(elements)的一个表(table)。在Numpy中, 维度被称为轴(axes), 每一个axes中的元素个数称为维的长度(length)

    1. [1, 2, 1] 这个数组是一维的,其中的元素1, 2, 3是在结构上等价的。 一共有三个元素,所以length=3
    2. [[1, 2, 2], [2, 2, 1]]这个数组是二维的,从外往里看,首先[1, 2, 2]和[2, 2, 1]两个部分是等价的,每一个部分都是由三个元素组成且为一维。于是整个数组可以看成是[x1, x2], x1=[1, 2, 2], x2=[2, 2, 1], 于是在第一个维度有两个元素,length=2。在x1和x2中分别有三个元素,所以第二个维度的length=3。
  • Numpy中的数组被称为ndarray,也被简单地称为array。

  • Numpy最重要的函数:

    1. ndarray.ndim:

    返回维度的总数

    2. ndarray.shape:

    以元组的形式返回数组每一维的大小(length),元组的长度为数组的维度。

    3. ndarray.size:

    返回元素的总个数

    4. ndarray.dtype:

    返回元素的类型,numpy.int32, numpy.int16, numpy.float64等类型

    5. ndarray.itemsize:

    返回每一个元素的字节数,比如int32类型返回(32/8)= 4个字节

    6. ndarray.data:

    功能不明,似乎是指为数组分配一个空间,类似于C++里面的new?

    例子:

一些例子

创造ndarray类型变量:

1. 用python的列表或是元组创造:

numpy.array()

  • 列表:
用列表创造ndarray
  • 元组:
用元组创造ndarray
  • 在用numpy.array()创建ndarray类型时可以指定元素类型:
指定类型

2. 创造初始数组:

实际上就是创造一个给定维数和每一维元素个数的数组,但不传入数据,而是用一些特定的数代替比如说0, 1等。相当于在内存中分配一个位置。

1. numpy.zeros():

全部用0来填充,默认类型为numpy.float32

numpy.zeros()

例子中创建了一个三维的数组,第一维有3个元素,第二维有4个元素,第三维有2个元素

2. numpy.ones()

全部用1来填充,默认类型维numpy.float32

numpy.ones()

例子中创建了一个三维数组,第一维有2个元素,第二维有5个元素,第三维有7个元素

3. numpy.empty()

创建一个数组,数组中的数取决于数组在内存中的位置处的值

numpy.empty()

创建出来的数组一般是非常奇怪的数,但也有可能创建出来非常整齐的数(如:本人在测试的时候创建了一个全是0.的(2, 3, 4)数组),不要多想,纯属巧合,重新打开IDLE一般就会不一样了。

4. numpy.arange([start, ]stop, [step, ]dtype=None)

创建一个数列, 可以传递四个参数:
start:开始值(默认为0);
stop:终止值;
step:步长(默认为1)
dtype:元素类型(默认为传入的数值的类型)

numpy.arange()

注意start和step要么同时有,要么同时无,也就是传递的参数要么是1个(只有stop),要么是3个(有start, stop, step),要么是4个(start, stop, step, dtype),不可能传递两个参数,如果一个有一个无,无法正确输出。

5. numpy.linespace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

创建一个以start为起点,stop为终点,中间有num项的等差数列:
1. start:开始值
2. stop:终止值
3. num:元素的个数(默认为50, 也就是生成50个元素,要是非负数)
4. endpoint: 如果为真,则终止值是最后一个元素,否则不包含终止值(默认为包含)
5. retstep: 如果为真,则以元组形式返回数组和步长,否则只返回数组(默认不返回步长)
6. dtype: 数据类型

numpy.linspace()

这个函数的endpoint参数很有意思。从上面的例子可以看出,如果为False的话,则不包含stop,步长的话就是(stop-start)/num,因为start占用了一个位置,因此最后一个数一定是start+(stop-start)/num(num-1)<stop恒成立,也就一定不包含stop。但是为True的话,那么就是start+step(num-1) = stop,得到step=(stop-start)/(num-1)。

6. numpy.zeros_like(a, dtype=None, order='K', subok=True)

返回一个和a相同结构和数据类型,但全部用零填充的数组:

  1. a:想要复制结构的数组
  2. dtype:元素类型(默认为a的元素类型)
  3. order:改变数组的内存布局(Memory Layout),默认为‘K',意味着尽可能接近a的布局
  4. subok: 如果为True,则使用a的子类类型,否则创建一个新的基类
numpy.zeros_like()

7. numpy.ones_like(a, dtype=None, order='K', subok=True)

返回一个和a相同结构和数据类型, 但全部用1来填充的数组,与numpy.zeros_like()相似

numpy.ones_like()

8. numpy.empty_like(a, dtype=None, order='K', subok=True)

返回一个和a相同结构和数据类型, 但全部用随机数来填充的数组,与numpy.zeros_like()相似

numpy.empty_like()

9. numpy.random.rand(d0, d1, d2, d3...dn)

创建一个数组,数组的结构为(d0, d1, d2, d3....),每一个元素的值在[0, 1)区间内:

d0, d1, d2, d3...:必须为整数,表示当前维度的元素个数,如果没有传入参数则返回一个浮点数

numpy.random.rand() numpy.random.rand()

10. numpy.random.randn(d0, d1, d2, d3, d4)

创建一个数组,数组的结构为(d0, d1, d2, d3....),每一个元素的值在[0, 1)区间内, 且满足标准正态分布N(0, 1):

d0, d1, d2, d3...:必须为整数,表示当前维度的元素个数,如果没有传入参数则返回一个浮点数

numpy.random.randn()

如果要返回N(μ, σ^2), 使用公式σ*np.random.randn() + μ

输出

  • 一般来说,如果元素个数过多,numpy只会输出头几个和末尾几个元素
  • 可以用np.set_printoptions(threshold=np.nan)函数来强制输出所有元素

基本运算

1. 加减法, a+b, a-b:

相同shape的两个数组可以相加减,对应元素相加减:

numpy 加减运算

2. 元素积(elementwise product) a*b:

对应元素相乘,两个数组交换位置结果不变:

元素积

3. 矩阵积(matrix product) a@b, a.dot(b)

满足矩阵乘法, 两个数组交换位置结果可能变化:

矩阵积

4. +=, *=:

运算规则与单个数的相似,但注意:

  1. 运算的两个数组要有相同的结构
  2. 某些类型不会自动转化:

一般只能从低精度的类型向高精度的类型转化

5. .min(), .sum(), .max():

运算规则与一元数据一样, 但可以将运算施加于特定的维度

指定维度的运算

相关文章

网友评论

    本文标题:Numpy官方指南学习笔记(1)

    本文链接:https://www.haomeiwen.com/subject/heagoftx.html