学习目标:
-
Understand the difference between one-, two- and n-dimensional arrays in NumPy;
-
Understand how to apply some linear algebra operations to n-dimensional arrays without using for-loops;(调用一些简单的方法)
-
Understand axis and shape properties for n-dimensional arrays.(axis为维度)
numpy的构成axis和length,其中axis表示为多少维度。length表示里面的元素。如【1,2,1】axis为1,length为3
他有几个属性:
ndarray.ndim #数组是几维的
ndarray.shape #去形容数组是什么形状。如二维数组是3*3的数组,
ndarray.size #算里面装有多少个元素(element)。
#注意:最内部的一个 []表示一个元素,无论元素内有多少个数字
ndarray.dtype #数据类型
ndarray.itemsize #数组占了多少字节
ndarray.data #一般用不上,
创建array方法
1、通过常规python的list或者set创建数组
import numpy as np >>> a = np.array([2, 3, 4]) >>> a array([2, 3, 4])
2、通过特殊函数去创建函数。注意:该初始化的数组后续数据一般需要我们自己去补充
#zero函数。
创建全零的数组
np.zeros((3, 4)) array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])#ones。创建全一的数组
np.ones((2, 3, 4), dtype=np.int16) array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]],#empty。仅创建空间。内部数据是内存中未删除干净的。
np.empty((2, 3)) array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260], # may vary [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
3、numpy中有arange函数。
np.arange(10, 30, 5) array([10, 15, 20, 25]) >>> np.arange(0, 2, 0.3) # it accepts float arguments array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])#arange(起始值,终止值,间隔)
输出array
由需要输出的最高维度的最左边的值往右边输出,
a = np.arange(6) # 1d array >>> print(a) [0 1 2 3 4 5] >>> >>> b = np.arange(12).reshape(4, 3) # 2d array >>> print(b) [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] >>> >>> c = np.arange(24).reshape(2, 3, 4) # 3d array >>> print(c) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]#其中 np.arange(24).reshape(2, 3, 4),相当于做了两个操作。
#首先是np.arange(24),创建了一个一维数组。
#[1,2,3..........,24]
#然后执行了reshape将上面的一维数组转换为了对应的维度的数组
基本操作/对数组内数值的操作:
操作以元素为单位
1、*号和@(or dot函数)的区别
*表示元素内的元素1对1的相乘。
@(dot)则是类似于线性代数的矩阵相乘,如A*B=C,是A的第n行乘以B的第m列,相加得到C(n,m)位置的具体值
2、+=和*=等相关操作,是对原有数组进行修改,而非创建新数组
3、numpy增加了一元运算的功能。(类似于excal中的sum、min功能)
# 若调用函数则多为整个数组进行操作, 也可以通过指定axis确定操作的凭据。
4、通用函数:numpy中自行封装了一些数学函数,如:sin、cos等
5、numpy中可以使用索引,切片,迭代进行操作
一维函数 | 多维函数(假设三维) | |
索引 | 仅需提供一个值。如:a【1】 | 需要给出对应个数的维度的值。如:a[1,2,3],才能找到具体的值 |
切片 | 提供两个值。 a[x:y] | 此处有两种办法。 不提供具体的a[x,y,z],其中的x,y,z可以省略一小部分, 或者通过“:”表示截取一部分。 |
迭代 | 从左至右,由小到大 | 由小到大,由最低维度开始一个一个增加 迭代中提供了flat作为多维函数的迭代器 |
对数组shape(形状)的操作:
改变array的形状,
An array has a shape given by the number of elements along each axis
通过指定各个维度需要多少个数,确定形状
a = np.floor(10 * rg.random((3, 4))) a array([[3., 7., 3., 4.], [1., 4., 2., 2.], [7., 2., 4., 9.]]) a.shape #我们在上面指定了3行4列的数组 (3, 4) #np.floor()表示向下取整 #rg.random ,其中rg是被重命名的包 #通过import numpy.random as rg 表示 #random会生成0,1的数字,其中3,4表示多少行多少列
reshape、resize、ravel、a.t方法异同:
import numpy as np
import numpy.random as rg
a = np.floor(10 * rg.random((3, 4)))
print(a)
#result:
[[3. 4. 5. 3.]
[6. 3. 4. 5.]
[8. 6. 8. 5.]]
a.ravel():
#result:array([3., 4., 5., 3., 6., 3., 4., 5., 8., 6., 8., 5.])
方法内无法写入改变的参数,执行此方法会变成一维顺序输出
#a.reshape():通过在()内写入参数可以改变维度、注:可以写入多个,多少个表示多少维度
#a.t则是转置,如:两行六列————转换为————>六行两列
上述方法,相当于是一个临时结果,如果不用变量接,就是一次性的物品
a.resize(),则是直接对这个数组进行操作,操作结果会保存在原数组内
堆叠多个维度的数组
hstack、vstack、column_stack、concatenate 四个方法
vstack方法,将两个数组自上而下的进行堆叠,(增加的是行数) numpy.r_()和他同理
hstack和column_stack的异同 hstack/ np.c_() 两个函数效果相同 column_stack 通过此方法自左向右增加 通过此方法也是自左向右增加 在一维数组时合并之后只会增加数组长度
一维数组会强制转换为二维数组
concate :用于多维度的数组处理
将数组拆分
hspit()函数:对列进行分割
两种填入数据方式
1、将数组均匀的分割成n分
2、将数组按照自己规定的方式进行分割
vsplit(对行进行分割)
使用方法和上述一样。
均匀分割
根据需求分割:
副本与视图:
Not copy at all | shallow copy | deep copy |
复制的东西就是本身 | 复制的东西不是本身,是基于本身,对视图的影响也会回馈到本身 | 复制后两者互相独立,对一方的操作不影响另一方 |