机器学习基础 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

Numpy数组的索引和迭代

一维数组的索引、切分和迭代和Python原生List一样。

import numpy as np
a=np.arange(10)\*\*3 #array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
print(a[2:5]) #选取第2个(序号从0开始计数)至第5个(不含第5个)的子序列。即array([8,27,64])
a[:6:2]=-1000
'''
相当于a[0:6:2]=-1000,从开始到第6个(注意不含),第2n号元素赋值-1000
结果:array([-1000,1,-1000,27,-1000,125,216,343,512,729])
'''
print(a[::-1])
'''
::表示输出所有元素,-1表示从尾到头倒序输出。如果是1则顺序输出
结果:array([729,512,343,216,125,-1000,27,-1000,1,-1000])
'''

多维数组的每一个维度都有一个索引,各个维度的索引之间用逗号隔开。

def f(x,y):return 10*x+y
b = np.fromfunction(f,(5,4),dtype=int) #将函数f作为数据坐标与数据值的关系式,生成5行4列矩阵
print(b)
'''
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
'''
print(b[2,3])    #23
print(b[0:5,1])
'''
array([ 1, 11, 21, 31, 41]) 
第1列第0至5行(不含)的元素生成数组
由于只有5行,因此等同于b[:,1]
'''
print(b[1:3,:])
'''
array([[10, 11, 12, 13],
       [20, 21, 22, 23]])
第1至3行(不含)的元素生成二维数组
'''
print(b[-1])
'''
array([40, 41, 42, 43])
b的最后一行,等同于b[-1,:]
当某一维度的索引缺失时,则认为该维度为全部。同样,可以用...表示索引为全部的部分
例如b[i]等价于b[i,...]
x[1,2,...]等价于x[1,2,:,:,:],
x[...,3]等价于x[:,:,:,:,3]
x[4,...,5,:]等价于x[4,:,:,5,:]
'''
c=np.array([[[0,1,2],[10,12,13]],[[100,101,102],[110,112,113]]])
print(c.shape)
'''
(2, 2, 3)
打印出数组每一维度的长度
'''
示例代码:Numpy-array-iterate.py