Numpy快速入门

基础知识

1.概念

NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在NumPy维度中称为

eg:3D空间中的点的坐标[1, 2, 1]具有一个轴。该轴有3个元素,所以我们说它的长度为3。在下图所示的例子中,数组有2个轴。第一轴的长度为2,第二轴的长度为3。

[[ 1., 0., 0.],
[ 0., 1., 2.]]

NumPy的数组类被调用ndarray。它也被别名所知 array。
tips:numpy.array这与标准Python库类不同array.array,后者只处理一维数组并提供较少的功能。

ndarray对象更重要的属性是:

  • ndarray.ndim - 数组的轴(维度)的个数。
  • ndarray.shape - 数组的维度。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
  • ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
  • ndarray.dtype - 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
  • ndarray.itemsize - 数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。
  • ndarray.data - 该缓冲区包含数组的实际元素。

tips:

  • 1D数组和1D数组的转置形状相同
import numpy as np
a = np.array([1,2,3])
print(a.shape)
b = a.T
print(b.shape)

out:
(3,)
(3,)
  • 二维行向量和列向量形状不同
a=np.arange(3).reshape(1,-1)
print(a.shape)
print(a.T.shape)
b=np.arange(3).reshape(-1,1)
print(b.shape)

out:
(1,3)
(3,1)
(3,1)

2.数组创建

numpy.array

#数字列表作为参数
 a = np.array([2,3,4])
#可以将序列的序列转换成二维数组,将序列的序列的序列转换成三维数组等
 b = np.array([(1.5,2,3), (4,5,6)])
#在创建时显式指定数组的类型
 c = np.array( [ [1,2], [3,4] ], dtype=complex )

numpy.arange & numpy.linspace

当arange与浮点参数一起使用时,由于有限的浮点精度,通常不可能预测所获得的元素的数量。最好使用linspace函数来接收我们想要的元素数量(num),而不是步长(step)

numpy.arange(start, stop, step , dtype)
np.linspace(start, stop, num , endpoint=True, retstep=False, dtype=None)
x = np.arange(10,20,2) 
#结果:
[10  12  14  16  18]

a = np.linspace(1,10,10)
#结果:、
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]

numpy.asarray 从已有的数组创建数组

x =  [1,2,3] 
a = np.asarray(x)  
print (a)
#结果:
[1 2 3]

x =  [(1,2,3),(4,5)]
a = np.asarray(x)
print (a)
print(a.shape)
#结果:
[(1, 2, 3) (4, 5)]
(2,)

numpy.empty & numpy.zeros & numpy.ones

创建指定形状的随机数组
numpy.empty(shape, dtype = float, order = 'C')
创建由0组成的数组
numpy.zeros(shape, dtype = float, order = 'C')
创建由1组成的数组
numpy.ones(shape, dtype = None, order = 'C')

3.数组打印

  • 最后一个轴从左到右打印,
  • 倒数第二个从上到下打印,
  • 其余部分也从上到下打印,每个切片用空行分隔。
    然后将一维数组打印为行,将二维数据打印为矩阵,将三维数据打印为矩数组表。

强制打印完整数组不省略中心部分更改set_printoptions

import sys
np.set_printoptions(threshold=sys.maxsize)

4.基本操作

数组上的算术运算符会应用到元素级别
乘:A@B 或 A.dot(B)
+= ,*=会直接修改原矩阵数组

5.索引切片和迭代

多维的数组每个轴可以有一个索引。这些索引以逗号​​分隔的元组给出b[0:5, 1]
三个点( ... )表示产生完整索引元组所需的冒号x[4,...,5,:]
对多维数组进行迭代是相对于第一个轴完成的,想要对数组的每个元素执行操作,使用flat属性

for row in b:
    print(row)
#结果:
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]

for element in b.flat:
    print(element)
#结果:
0
1
2
3
10
11
12
13
20
···

形状操纵

1.改变数组形状

ravel() & flatten 将多维数组降为一维

ravel()返回的是视图,改变元素的值会影响原始数组;
flatten()返回的是拷贝,改变元素的值不会影响原始数组。

reshape & resize()

reshape()返回拷贝
resize()返回视图

2.堆叠数组

np.vstack()纵向堆叠
np.hstack()横向堆叠
np.column_stack()将一维数组作为列堆叠到二维数组中

3.数组拆分

np.hsplit(ary,indices_or_sections)沿数组的水平轴拆分数组,返回的形状相等的数组的数量

posted @ 2020-05-30 10:57  翠果不是果果  阅读(277)  评论(0编辑  收藏  举报