【numpy基础】

写在前面:NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同。

目录:
一、创建数组
二、索引、切片和迭代
三、形状操纵
四、NumPy数组的属性
五、运算符
六、数组对象的方法
七、函数
八、拷贝&深拷贝

一、创建数组

1.1 使用array函数从常规Python列表或元组中创建数组(函数的参数为列表/元组);
1.2 NumPy提供了几个函数来创建具有初始占位符的数组(函数的参数为“形状元组”);
1.3 创建数字组成的数组对象;比如,np.arange( 10, 30, 5 ),左闭右开,步长;
1.4 创建线段,np.linspace( 0, 2*pi, 100 ),一段一段的节点;

# 创建方式1,使用array函数从常规Python列表或元组中创建数组
import numpy as np
a = np.array([2,3,4])
b = np.array([(1,2),(3,4),(5,6)])
c = np.array(list(range(1,10)))
# 创建方式2,NumPy提供了几个函数来创建具有初始占位符内容的数组,但形状已知
a = np.zeros((2,3)) # d = np.zeros(2,3) 会报错
b = np.ones((3,2))
c = np.empty((2,2)) # 不是真的空,是随机产生的数据。
# 创建方式3,创建数字组成的数组;np.arange( 10, 30, 5 ),左闭右开,步长;
arr = np.arange(1,10,2)
print(type(arr)) # 
print(arr) # [1 3 5 7 9]

二、索引、切片和迭代

2.1 A为矩阵,A[2]索引第2行,A[2][1]或A[2,1]索引第2行第1列的元素;
2.2 A[2,:]、A[:,1]
2.3 迭代行for row in A、迭代列for column in A.T 、迭代元素for item in A.flat;

A = np.array([[1,2],[3,4],[5,6]])
print(A[2])
print(A[2][1])
print(A[2,1])
print(A[:,0]) # 切片+索引,提取某一列,一维
print(A[1,:]) # 索引+切片,提取某一行,一维
print(A[:,0:1])# 切片+切片,二维

三、形状操纵

3.1 a.reshape(6,2)/ ((6,2)),返回一个修改后的数组,但不会更改原始数组,即a不变;
3.2 a.resize((2,6)),会修改数组本身,a本身被改变;
3.3 增加维度:
    在行上增加一个维度A[np.newaxis, :];
    在列上增加一个维度A[:, np.newaxis];

四、NumPy数组的属性

4.1 ndarray.ndim、ndarray.shape、ndarray.size、ndarray.dtype

五、运算符

5.1 数组上的算术运算符会应用到“元素”级别;
5.2 矩阵乘积可以使用@运算符(在python> = 3.5中)或dot函数或方法执行;

# 算术运算符会应用到“元素”级别
import numpy as np
arr1 = np.array([10,20,30])
arr2 = np.arange(1,4)
print("arr1:", arr1)
print("arr2:", arr2)

a = arr1-arr2
b = arr2**2
c = 10*np.sin(arr1)
d = arr1<25

六、数组对象的方法

许多一元操作,例如计算数组中所有元素的总和,都是作为ndarray类的方法实现的。
6.1 不指定轴
6.2 指定轴

# 数组对象的方法
arr = np.arange(12).reshape(3,4)
print("对整个数组,求最小值:", arr.min())
print("对整个数组,求最大值:", arr.max())
print("对整个数组,求和:", arr.sum())
print("行总计:", arr.sum(axis = 1))
print("列总计:", arr.sum(axis = 0))

七、函数

7.1 通函数

NumPy提供熟悉的数学函数,例如sin,cos和exp。在NumPy中,这些被称为“通函数”(ufunc)。在NumPy中,这些函数在数组上按元素进行运算,产生一个数组作为输出。

# 通函数
arr = np.arange(3)
a = np.sqrt(arr)
b = np.exp(arr)
print(arr)
print(a)
print(b)

7.2 用于合并/分割2个或多个数组对象的函数

合并
1、垂直方向的合并np.vstack()、水平方向的合并np.hstack();
2、指定方向的合并np.concatenate((A,B), axis=*);
分割
1、与合并同理,split、vsplit、hsplit、array_split;

a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
res1 = np.vstack((a,b))
res2 = np.hstack((a,b))

八、拷贝&深拷贝

8.1 拷贝
在numpy数组中,b = a表示a、b关联在一起了,a变b会跟着变;
8.2 深拷贝
b = a.copy()表示深拷贝,a和b没有关联在一起。

你可能感兴趣的:(【numpy基础】)