1.以管理员的形式打开cmd

2.安装numpy插件

pip install numpy

3.安装成功后,输入pip list 命令查看是否安装成功

pip list

 

3.创建

#使用array创建一维数组
list01 = [1,2,3,4]
np01 = np.array(list01)
print(np01)
print(type(np01))
#使用array创建二维数组
list02 = [[1,2,3,4],[5,6,7,8]]
np02 = np.array(list02)
print(np02)
print(type(np02))
#使用array创建三维数组
list03 = [[[1,2,3,4],[5,6,7,8],[9,10,11,12]]]
np03 = np.array(list03)
print(np03)
print(type(np03))
"""

arange 创建数组

#一维数组
 

a = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
a = np.arange(2,10) #[2 3 4 5 6 7 8 9]
a = np.arange(1,10,2) #[1 3 5 7 9]
a = np.arange(1,10,2,dtype=float)
print(a)
#二维数组
#切记前面的12,必须满足3*4
np01  = np.arange(12).reshape(3, 4)
print(np01)

用random创建数组

# np.random.random()    生成0到1之间的随机数  
#创建一维数组   size生成几个数据,可直接写4
np01= np.random.random(size=4) #[0.13475357 0.8088961  0.52055803 0.49706622]
#创建二维数组  size=(3,4) 3行4列 可用()和[] ,效果一样
np01= np.random.random((3,4))
#创建三维数组  两个三行四列
np01= np.random.random((2,3,4))
print(np01) 

使用logspace创建数组

np.logspace(start,stop,num=50,endpoint=Ture,base=10.0,dtype=None)

参数描述
start序列的起始值
stop序列的终止值 ,如果endpoint=True,则证明数组包含于数列
num生成样本数量,默认是50
endpoint如果为ture则包含stop,否则不包含
base对数log的底数,默认10.0
dtype数据类型

练习

创建一个长度为10的一维全为0的ndarry对象,然后让第五个元素等于
创建一个元素为从10到49的narray对象。
创建一个4*4的二维数组,并输出数组元素类型。
创建一个数组,该数组可以完全将坐标位置为(0,1,3)到(3,0,1)的转置。
将4题中的数据类型转换为float64。

数组的属性

属性描述
ndarray.ndim数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
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),而int32类型的数组的itemsize为4(=32/8)。它等于ndarray.dtype.itemsize。
ndarray.T数组转置,及行列调换
ndarray.nbytes整个数组所需的字节数量,可以使用nbytes属性。其值等于数组的size属性值乘以 itemsize属性值。
np01 = np.array([1,2,3,4])
np01 = np.array([[1,2,3,4]])
#print(np01.ndim)
print(np01.shape)
print(np01.size)
print(np01.dtype)
print(np01.itemsize) #一个字节默认是8为  32/8 = 4
print(np01.nbytes)#一个数字字节4,4*4=16

list01 = [
    [1,2],
    [3,4],
    [5,6]
]
np01=np.array(list01)
print(np01)
np02= np01.T
print(np02)

数据的索引和切片

一维数组的索引

list01= [1,2,3,4,5]
np01 = np.array(list01,dtype="int32")
print(np01)
"""
正向递增索引 从0开始
1,  2,  3,  4,  5 数据
0   1   2   3   4 索引
1.左开右闭
2.不写startIndex默认从0开始
"""
print(np01[0]) #1
print(np01[1:4]) #[2 3 4]
print(np01[1:5]) #[2 3 4 5]
print(np01[:5]) #[1 2 3 4 5]
​
"""
反向递减索引 从-1开始
1,  2,  3,  4,  5 数据
-5  -4  -3  -2  -1 索引
1.左开右闭
2.不写startIndex默认从0开始
"""
print(np01[-1]) #5
print(np01[-5:-1]) #[1 2 3 4]
print(np01[-5:]) #[1 2 3 4 5]
​
​

一维数组的切片

语法[start:stop:step]
list01= [1,2,3,4,5]
np01 = np.array(list01,dtype="int32")
print(np01)
#正向索引切片
print(np01[:])#从0到0
print(np01[3:])#从3开始到结尾
print(np01[:5])#从0开始到5结尾
print(np01[1:5:2])#步长是2
​
#反向索引切片
print(np01[::-1])#-1证明是反向获取
print(np01[-5:-2])
​
#正负一起使用
print(np01[-5:4]) #[1 2 3 4]

二维数组的索引

#创建二维数组
list01= [
    [1,2],
    [3,4],
    [5,6],
    [7,8]
]
np01= np.array(list01)
print(np01)
#print(np01.ndim) #查看维数
print(np01[1])#获取第二行
print(np01[1][1])#获取第二行第一列

二维数组的切片

 
[对行进行切片,对列的切片]
对行的切片:可以有start:stop:step
对列的切片:可以有start:stop:step
#创建二维数组
list01= [
    [1,2],
    [3,4],
    [5,6],
    [7,8]
]
np01= np.array(list01)
print(np01)
print(np01[:,:])#所有行所有列
#所有行部分列
print(np01[:,1])#所有行第二列
print(np01[:,0:2])#所有行的第一列和第二列
​
#部分列所有行
print(np01[1,:])#获取第二行所有列
print(np01[0:2,:])#获取第一和二行所有列
print(np01[::2,:])#获取奇数行所有列
​
#部分行部分列
print(np01[1,1])#第二行第二列
​
#组合使用的时候改怎么办
#获取第三行第二列(6),第四行第一列(7)
#行写成元组放在前面,列写成元组放在后面
a= np01[(2,3),(1,0)]
print(a)
​
#负索引的使用
print(np01[-1])#最后一行
print(np01[::-1])#行倒序
print(np01[::-1,::-1])#行倒序,列倒叙


练习

创建一个二维数组,取第二行第一列和第三行第二列的数据。
获取二维数组中数组的1,2行第2,3列的数据。

数组的迭代

使用np.nditer迭代

最好no,知道常用的即可

op,flags,op_flags,op_dtypes,order={‘C’,‘F’,‘A’}, casting,op_axes, itershape, buffersize,

"""
flags : str的序列,可选。用于控制迭代器行为的标志。
  “buffered”可在需要时启用缓冲。
  “c_index”导致跟踪C顺序索引。
  “f_index”导致跟踪Fortran-order索引。
  “multi_index”导致跟踪多个索引或每个迭代维度一个索引元组。
  
op_flags:tr列表,可选。这是每个操作数的标志列表。至少,必须定“readonly”,“readwrite”或“writeonly”中的一个
  “readonly”表示只读取操作数。
  “readwrite”表示将读取和写入操作数。
  “writeonly”表示只会写入操作数。
  “no_broadcast”阻止操作数被广播。
  “contig”强制操作数数据是连续的。
  
op_dtypes : dtype的dtype 或tuple,可选。操作数所需的数据类型
​
order: {‘C’,‘F’,‘A’,‘K’},
​
casting :{‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’},可选。控制进行复制或缓冲时可能出现的数据转换类型。建议不要将此设置为“unsafe”,因为它会对累积产生不利影响。
   “no”表示完全不应强制转换数据类型。
   “equiv”表示只允许更改字节顺序。
   “safe”表示只允许保留值的强制转换。
   “same_kind”意味着只允许安全的类型或类型内的类型,如float64到float32。
   “unsafe”表示可以进行任何数据转换。
   
op_axes : 整数列表列表,可选。如果提供,则是每个操作数的int或None列表。操作数的轴列表是从迭代器的维度到操作数的维度的映射。可以为条目放置值-1,从而将该维度视为“newaxis”。
​
itershape : 整数元组,可选。迭代器的理想形状。这允许“allocate”具有由op_axes映射的维度的操作数不对应于不同操作数的维度,以获得该维度不等于1的值。
​
buffersize : int,可选。启用缓冲时,控制临时缓冲区的大小。设置为0表示默认值
""

"
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐