python学习之numpy中的cumsum函数、tile函数

cumsum函数定义:

  • cumsum(a, axis=None, dtype=None, out=None) 
  • a.cumsum(axis=None, dtype=None, out=None)

  返回:沿着指定轴的元素累加和所组成的数组,其形状应与输入数组a一致

其中cumsum函数的参数:

  • a:数组
  • axis:轴索引,整型,若a为n维数组,则axis的取值范围为[0,n-1]
  • dtype:返回结果的数据类型,若不指定,则默认与a一致。
  • out:数据类型为数组。用来放置结果的替代输出数组,它必须具有与输出结果具有相同的形状和缓冲长度

代码示例:

1.对于一维数组而言:

import numpy as np
arr=np.array([1,2,3,4,5,6,7,8,9])
result=arr.cumsum()    #此时axis只能取0,因此,axis=0可不写
#result: array([ 1,  3,  6, 10, 15, 21, 28, 36, 45], dtype=int32)

输出结果的数组result[i]的结果为sum(arr[:i+1])。

2.对于二维数组而言

import numpy as np
arr=np.array([[1,2,3],[4,5,6],[7,8,9]])
#沿着axis=0轴计算
result1=arr.cumsum(0)   #array([[ 1,  2,  3],[ 5,  7,  9],[12, 15, 18]], dtype=int32)
#沿着axis=1轴计算
result2=arr.cumsum(1)   #array([[ 1,  3,  6],[ 4,  9, 15],[ 7, 15, 24]], dtype=int32)
#arr.cumsum()并不是arr.cumsum(0)和arr.cumsum(1)的并集,而是将arr重塑为一维数组后的,再计算cumsum()的结果
arr.cumsum()#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45], dtype=int32)
输出结果的数组result1[i][j]的结果为sum(arr[:i+1,j]);

输出结果的数组result2[i][j]的结果为sum(arr[i,:j+1])

3.对于n维数组而言,以3 维举例:

arr=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
result1=arr.cumsum(0)    #array([[[ 1,  2],[ 3,  4]],[[ 6,  8],[10, 12]]], dtype=int32)
result2=arr.cumsum(1)    #array([[[ 1,  2],[ 4,  6]],[[ 5,  6],[12, 14]]], dtype=int32)
result3=arr.cumsum(2)    #array([[[ 1,  3],[ 3,  7]],[[ 5, 11],[ 7, 15]]], dtype=int32)

输出结果的数组result1[i][j][k]的结果为sum(arr[:i+1,j,k]);

输出结果的数组result2[i][j][k]的结果为sum(arr[i,:j+1,k])

输出结果的数组result3[i][j][k]的结果为sum(arr[i,j,:k+1])

n维数组(n>3)的以此类推。

tile函数定义:

  • tile(A, reps) 

返回一个数组,该数组是通过复制A reps次获得。

tile参数说明:

  • A:输入数组
  • reps:一个元组,代表沿各个轴重复A的次数。ps:A的顺序并不是单纯的按照axis增大或减小的顺序。

代码示例:

#输入一维数组  
a = np.array([0, 1, 2])
#沿axis=1方向上复制2次,默认#沿axis=0方向上复制1次
np.tile(a, 2)          #array([0, 1, 2, 0, 1, 2])
#沿axis=0方向上复制2次,#沿axis=1方向上复制1次
np.tile(a, (2, 1))     # array([[0, 1, 2],[0, 1, 2]])
##沿axis=2方向上复制2次,沿axis=0方向上复制1次,沿axis=1方向上复制3次,
np.tile(a, (2, 1, 3))  #array([[[0, 1, 2, 0, 1, 2, 0, 1, 2]],[[0, 1, 2, 0, 1, 2, 0, 1, 2]]])
#输入二维数组
b = np.array([[1, 2], [3, 4]])
#沿axis=1方向上复制2次,默认#沿axis=0方向上复制1次
np.tile(b, 2)          #array([[1, 2, 1, 2],[3, 4, 3, 4]])
#沿axis=0方向上复制2次,#沿axis=1方向上复制1次
np.tile(b, (2, 1))    #array([[1, 2],[3, 4],[1, 2],[3, 4]])

猜你喜欢

转载自blog.csdn.net/lzh_12345/article/details/79848100