Numpy数组在处理向量求和的问题上比不用numpy数组下 纯python来解决的问题要省事的多
下面是纯python语言
def sum1(n)
a= range(n)
b= range(n)
def sum2()
for in range(len(a))
a[i]= i**2
b[i]=i**3
c.append(a[i]+b[i])
return c
n = raw_input(“n”)
def sum(n)
a= numpy.arange(n)**2
b= numpy.arange(n)**3
c= a+b
return c
以下是一些numpy数组的函数 ravel()拆解flatten()拉直 transpose()矩阵的转置 resize()改变数组的结构
水平叠加:hstack水平叠加两个数组
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b = 2*a
>>> b
array([[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
>>> numpy.hstack((a,b))
array([[ 0, 1, 2, 0, 2, 4],
[ 3, 4, 5, 6, 8, 10],
[ 6, 7, 8, 12, 14, 16]])
>>>
同样的concatenate()函数也可以如此
值得一提的是当这个函数axis参数为1时才可以实现
Axis代表维度 当一维数组的时候axis值为1
至于怎么理解axis呢?
例如
c = ([[1,2,3,4],[5,6,7,8],
[[1,2,3,4],[5,6,7,8]])
执行一下代码
In:c.sum(axis = 0)
Out:
[2,4,6,8],[10,12,14,16]
如果将c看做是一个2X2的矩阵,那么结果就显而易见了。当axis = 0时是将这个矩阵每一列求和然后输出
看一下axis = 1时
In:c.sum(axis = 1)
Out:
[6,8,10,14],[6,8,10,14]
还是将c看做一个2X2的矩阵那么结果就是矩阵每一行的和
当axis = 2时 是将矩阵内的每个元素进行求和,即对列表中每个元素求和,返回一个2X2的矩阵
In:c.sum(axis = 2)
Out: [10,26]
[10,26]
接下来就是深度叠加函数 dstack()
numpy.dstack((a,b))
array([[[ 0, 0],
[ 1, 2],
[ 2, 4]],
[[ 3, 6],
[ 4, 8],
[ 5, 10]],
[[ 6, 12],
[ 7, 14],
[ 8, 16]]])
这是利用纵向的方法来叠加一摞数组,举个例子就是讲一个图像数据的二维数组上叠加另一幅图像的数据。
列式堆叠column_stack()
>>> once = p.arange(2)
>>> twice = 2*once
>>> p.column_stack(once,twice)
>>> once
array([0, 1])
>>> twice
array([0, 2])
>>> p.column_stack((once,twice))
array([[0, 0],
[1, 2]])
讲column_stack跟hstack对比一下发现这两个函数形成的数组是相同的,如果用==运算符来检验一下看一下
In:p.column_stack((a,b))== p.hstack((a,b))
Out:array([[True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True]])
没错 是一摸一样的。
既然numpy有办法将数组合并,那么就一定有办法将数组拆分。
还是借用上面的数组进行操作
相关的函数有hsplit() vsplit() dsplist split()
先来介绍第一个 hsplit()横向拆分。
In:a
Out: array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In:hsplit(a,3)
Out:[array([[0],
[3],
[6]]),
array([[1],
[4],
[7]]),
array([[2],
[5],
[8]])]
接下来介绍的是纵向拆分 vsplit()函数
将数组沿着纵轴的方向进行拆分
In:vsplit(a,3)
Out: p.vsplit(a,3)
[array([[0, 1, 2]]), array([[3, 4, 5]]),array([[6, 7, 8]])]
其实也相当于用split函数 axis参数为0的分解
p.split(a,3,axis = 0)
[array([[0, 1, 2]]), array([[3, 4, 5]]),array([[6, 7, 8]])]
最后是深度拆分 dsplit()他会沿着深度的方向进行拆分
下面列举一个秩为4的数组进行说明
In:p.dsplit(sc,4)
Out:[array([[[ 0],
[ 4],
[ 8],
[12]],
[[16],
[20],
[24],
[28]],
[[32],
[36],
[40],
[44]],
[[48],
[52],
[56],
[60]]]), array([[[ 1],
[ 5],
[ 9],
[13]],
[[17],
[21],
[25],
[29]],
[[33],
[37],
[41],
[45]],
[[49],
[53],
[57],
[61]]]), array([[[ 2],
[ 6],
[10],
[14]],
[[18],
[22],
[26],
[30]],
[[34],
[38],
[42],
[46]],
[[50],
[54],
[58],
[62]]]), array([[[ 3],
[ 7],
[11],
[15]],
[[19],
[23],
[27],
[31]],
[[35],
[39],
[43],
[47]],
[[51],
[55],
[59],
[63]]])]
内容来自 Ivan Idris所著Python数据分析