python: numpy--函数 shape用法
shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数。
举例说明:
建立一个3×3的单位矩阵e, e.shape为(3,3),表示3行3列,第一维的长度为3,第二维的长度也为3
>>> e = eye(3)>>>e
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])>>>e.shape
(3, 3)
建立一个一维矩阵b, b.shape 为矩阵的长度
>>> b =array([1,2,3,4])>>>b.shape
(4,)
#可以简写>>> shape([1,2,3,4])
(4,)
建立一个4×2的矩阵c, c.shape[1] 为第一维的长度,c.shape[0] 为第二维的长度。
>>> c = array([[1,1],[1,2],[1,3],[1,4]])>>>c.shape
(4, 2)>>> c.shape[0]4
>>> c.shape[1]2
一个单独的数值,返回值为空
>>> shape(3)
()
Python的Zip函数
zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。具体意思不好用文字来表述,直接看示例:
1.示例1:
x = [1, 2, 3]
y= [4, 5, 6]
z= [7, 8, 9]
xyz=zip(x, y, z)
print xyz
运行的结果是:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
从这个结果可以看出zip函数的基本运作方式。
2.示例2:
x = [1, 2, 3]
y= [4, 5, 6, 7]
xy=zip(x, y)
print xy
运行的结果是:
[(1, 4), (2, 5), (3, 6)]
从这个结果可以看出zip函数的长度处理方式。
3.示例3:
x = [1, 2, 3]
x=zip(x)
print x
运行的结果是:
[(1,), (2,), (3,)]
从这个结果可以看出zip函数在只有一个参数时运作的方式。
4.示例4:
x =zip()
print x
运行的结果是:
[]
从这个结果可以看出zip函数在没有参数时运作的方式。
5.示例5:
x = [1, 2, 3]
y= [4, 5, 6]
z= [7, 8, 9]
xyz=zip(x, y, z)
u= zip(*xyz)
print u
运行的结果是:
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
一般认为这是一个unzip的过程,它的运行机制是这样的:
在运行zip(*xyz)之前,xyz的值是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
那么,zip(*xyz) 等价于 zip((1, 4, 7), (2, 5, 8), (3, 6, 9))
所以,运行结果是:[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
注:在函数调用中使用*list/tuple的方式表示将list/tuple分开,作为位置参数传递给对应函数(前提是对应函数支持不定个数的位置参数)
6.示例6:
x = [1, 2, 3]
r= zip(* [x] * 3)
print r
运行的结果是:
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
它的运行机制是这样的:
[x]生成一个列表的列表,它只有一个元素x
[x] * 3生成一个列表的列表,它有3个元素,[x, x, x]
zip(* [x] * 3)的意思就明确了,zip(x, x, x)
Python np.where()函数
numpy.where()函数是三元表达式x if condition else y的矢量化版本。假设我们有一个布尔数组和两个值数组:
x = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y= np.array([2.1, 2.2, 2.3, 2.4, 2.5])
condition= np.array([True, False, True, True, False])
假设我们想要根据condition中的值选取x和y的值:当condition中的值为True时,选取x的值,否则从y中选取。
result = np.where(condition, x, y)
打印的结果为:【1.1, 2.2, 1.3, 1.4, 2.5】
Python np.meshgrid()函数
meshgrid函数通常在数据的矢量化上使用,但是使用的方法我暂时还不是很明确。而meshgrid的作用适用于生成网格型数据,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。接下来通过简单的shell交互来演示一下这个功能的使用,并做一下小结。
交互显示:
>>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])>>>X
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])>>>Y
array([[4, 4, 4],
[5, 5, 5],
[6, 6, 6],
[7, 7, 7]])
由上面的交互可以看出,meshgrid的作用是根据传入的两个一维数组参数生成两个数组元素的列表。如果第一个参数是xarray,维度是xdimesion,第二个参数是yarray,维度是ydimesion。那么生成的第一个二维数组是以xarray为行,ydimesion行的向量;而第二个二维数组是以yarray的转置为列,xdimesion列的向量。