一维数组中选择部分元素输出,即数组名【【下标】】,是两个中括号!
二维数组选取一个元素,即数组名【行,列】,行列是从0开始的。
行列可以省略,行和列全部省略时,输出整个数组。
行省略,代表输出所有行;列省略,代表输出所有列。
可以指定输出某几行、某几列,即数组名【1:3,1:4】,输出1到2行且1到3列的所有元素,即输出二维数组。
import numpy as npans = np.array([1,2,3,4,5,6,7,8,9]) #一维数组a = np.array([1,2,3,4,5,6,7]) #一维数组b = np.array([[1,2,3],[4,5,6],[7,8,9]]) #二维数组#获取指定位置的元素print(ans[[2,3,5]]) #即为输出ans数组中下标为2,3,5的元素print(b[1,2]) #输出1行2列的元素,这里的行和列是从0开始的print(b[1,:]) #输出1行的所有元素,“:”就代表着输出所有元素print(b[:,2]) #输出2列的所有元素print(b[1:3,0:3]) #1到2行,0到2列的元素,“端点左闭右开”
numpy是高性能科学计算和数据分析的基础包,支持为读书族与矩阵运算包括:
一个强大的n为数组对象ndarray,具有适量算数运算和复杂广播能力的快速且节省时间的多维数组。用于对整组数据进行快速运算的标准数学函数对于读写磁盘数据的工具以及用于操作内存映射文件的工具线性代数,随机数生成以及傅里叶变换等功能创建nadrray:创建数组最简单的办法就是使用array函数,它接受一切序列型的对象,然后产生一个含有传入数据的numpy数组,其中嵌套序列(等长列表组成的列表)将会被转化为一个多维数组
numpy.array(obkject, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object 数组或嵌套的数列
dtype 数组元素的数据类型 可选
copy 对象是否需要复制
order 创建数组的样式,c为行方向,F为列方向,A为任意方向
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
import numpy as npa = [1,2,3,4]b = np.array(a)print(b)>>> array([1,2,3,4])c = np.array([[1,2],[3,4]])print(c)>>>>[[1,2][3,4]]
除了np.array之外,还有一些函数也可以新建数组:
zrrors和ones分别可以创建指定长度或者形状的全0或1数组empty可以创建一个没有任何具体值的数组np.zeros(3) # 全0数组np.ones(3) # 全1数组np.zeros((3,3)) #全0二维数组 三行三列np.zeros((3,1)) # 0二维数组 三行一列np.zeros((1,3))np.ones((3,3))np.identity(3) #单位矩阵,三行三列
创建随机数
均匀分布
np.random.rand(10,10) 创建指定形状(示例为10行10列)的数组(范围在0-1之间)np.random.uniform(0,100) 创建指定范围内的一个数np.random.randint(0,100) 创建指定范围内的整数正态分布
np.random.normal(1.75,0.1,(2,3)) 给定均值/标准差/维度的正态分布np.random.randint(0,50,5) # 随机数组,5个0-50之间的数字np.random.randint(0,50,(3,5)) #3行5列 供15个随机数,都在0-50之间np.random.rand(10) #10个结余[0,1)之间的随机数np.random.standard_noraml(5) #从标准正太分部中随机采样5个数字
b.reshape()可以更改形状(3,2)变(2,3)或者其他
数组很重要,因为它可以是我们不用编写循环即可对数据执行批量运算,这通常叫做矢量化,大小相同的数组之间的任何算数运算都会将运算应用到元素级,同样,数组与标量的算数运算也会将那个表两只传播到各个元素
arr = np.array([[1.,2.,3.],[4.,5.,6.]])print(arr)>>>array([[1., 2., 3.], [4., 5., 6.]])print(1/array)>>>array([[1. , 0.5 , 0.33333333], [0.25 , 0.2 , 0.16666667]])print(arr-arr)>>>array([[0., 0., 0.], [0., 0., 0.]])print(arr*arr)>>>array([[ 1., 4., 9.], [16., 25., 36.]])print(arr*0.5)>>>array([[0.5, 1. , 1.5], [2. , 2.5, 3. ]])
arr = np.arange(10)print(arr[5])>>>5print(arr[5:8])>>>array([5,6,7])print(arr[5:8]=12)>>>array([0,1,2,3,4,12,12,12,8,9])arr_slice = arr[5:8]arr_slice[1] = 12345print(arr)>>>array([0,1,2,3,4,12,12345,12,8,9])arr_slice[:] = 64print(arr)>>>array([0,1,2,3,4,64,64,64,8,9])在二维数组中,个所有位置上的元素不再是标量,而是一维数组可以对个元素进行递归访问,但这样有点麻烦传入一个以逗号隔开的所有列表来选取单个元素在多维数组中,如果省略了后面的索引,则返回对象会使一个维度低一点的ndarray
arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])print(arr3d)>>>array([[[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]])print(arr3d[0])>>>array([[1, 2, 3], [4, 5, 6]])print(arr3d[0][1])>>>array([4, 5, 6])
可以通过数组上的一组数学函数对整个 数组或者某个轴向的数据进行统计计算
方法说明sum对数组中全部或轴向元素求和。零长度的数组的sum为0mean算数平均数,零长度的数组的mean为NANstd,var分别为标准差和方差,自由度可调(默认为n)min,max最小值和最大值argmin,argmax分别为最小值和最大值的索引cumsum所有元素的累加cumprod所有元素的累积arr = np.random.randn(5,4) #5行4列的正太分部的数据print(arr.mean()) #这个值和下面方法的值相同print(np.mean(arr))print(arr.sum())
值得注意的是:
mean和sum这类的函数可以接受一个axis参数(用于计算该轴向上的统计值)
arr.mean(axis=1)arr.sum(0)
cumsum:按照所给定的周参数返回元素的梯形累积和,axis=0,按照行累加。axis=1,按照列累加
cumprod:按照所给定的周参数返回元素的梯形累积乘积,axis=0,按照行累积,axis=1按照列累积
arr = np.array([[0,1,2],[3,4,5],[6,7,8]])arr.cumsum(0)>>>array([[ 0, 1, 2], [ 3, 5, 7], [ 9, 12, 15]], dtype=int32)arr.cumprod(1)>>>array([[ 0, 0, 0], [ 3, 12, 60], [ 6, 42, 336]], dtype=int32)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持一聚教程网。