2017/03/07
#!/usr/bin/env python# -*- coding: UTF-8 -*-"""@author: XiangguoSun@contact: sunxiangguodut@QQ.com@file: learn_numpy.py@time: 2017/3/6 15:09@software: PyCharm"""import numpy as np'''1 ndarray'''data=[[1,2,3],[4,5,6]]#也可以是其他序列类型arr1=np.array(data)PRint arr1,arr1.ndim,arr1.shape,arr1.dtypeprint np.zeros((3,)),np.zeros((3,)).ndim,np.zeros((3,)).shapeprint np.zeros((3,1)),np.zeros((3,1)).ndim,np.zeros((3,1)).shapeprint np.zeros((1,3)),np.zeros((1,3)).ndim,np.zeros((1,3)).shapeprint np.zeros(3),np.zeros(3).ndim,np.zeros(3).shape #np.zeros(3)==np.zeros((3,))print np.ones(3)print np.empty(3)print np.ones_like(arr1),np.zeros_like(arr1),np.empty_like(arr1)#shape 为arr1的ndarryprint np.identity(2)#等价于np.eye(2)#创建单位矩阵'''2 ndarray和标量运算大小相同的ndarray之间任何运算都会将运算应用到元素级ndarray与标量的运算也会将那个标量broadcasting到ndarray的各个元素中但是,不同大小的数组之间的运算叫做broadcasting。2.1简单的运算略2.2 broadcasing广播的原则:如果两个数组的后缘维度的轴长相符或者其中一方长度为1,则认为他们是广播兼容的。广播会在缺失维度和(或)长度为1的维度上进行。例如:1:shape((4,3))+shape((3,))(4,3)和(3,)的后缘维度为3.因此是广播兼容的。传播方向在缺失维度上进行。这里 4 vs 缺失, 3 vs 3因此传播方向沿着0轴2:shape((4,3))+shape((4,1))(4,3)和(4,1)的后缘维度为:3 vs 1 因此是广播兼容的。传播方向在1轴上试想,如果是(1,4,3)和(4,1)呢?也是广播兼容的,但是传播方向在0轴和2轴上3:shape((3,4,2))+shape((4,2))(3,4,2)和(4,2)的后缘维度是4vs4 2 vs 2.因此是广播兼容的,传播方向在缺失轴0轴4:shape((1,5,3))+shape((5,3))后缘维度是 5 vs 5, 3 vs 3因此是广播兼容的,传播方向在缺失轴0轴'''#print np.ones((3,4,2))+np.ones((3,4,2))#报错,因为广播不兼容'''2 基本的索引和切片如果你想得到ndarray切片的一份副本而非在源数据上修改,就需要显示地进行复制操作b=arr[5:8].copy()否则,单纯地b=arr[5:8]那么修改b,arr对应的元素也会被修改很简单,略''''''3,bool型索引'''names=np.array(['bob','bob','david'])values=np.array([1,2,3])print values[names == 'bob']#& | -(!),注意python 关键字and or在这里无效print values[values > 2]'''4,花式索引花式索引与切片不同,它总是将数据复制到新数组中'''arr= np.arange(32).reshape((8,4))print arrprint " "print arr[[1,5,2,7]]print arr[[1,5,2,7]]print arr[[1,5,2,7],[2,1,3,1]]#(1,2),(5,1),(2,3),(7,1)print arr[[1,5,2,7]][:,[2,1,3,1]]print arr[np.ix_([1,5,2,7],[2,1,3,1])]'''5,数组转置和轴对换'''arr= np.arange(15).reshape((3,5))print arrprint arr.transpose()print arr.Tprint np.dot(arr.T,arr)arr = np.arange(16).reshape((2,2,4))print arrprint arr.transpose((1,0,2))#轴序列原本为(0,1,2),现在变成(1,0,2),相当于交换x,y:m[y][x][z]=m[x][y][z]print arr.swapaxes(1,2)#交换1号轴和2号轴m[x][z][y]=m[x][y][z]6,通用函数 通用函数执行元素级别运算的函数。作用到每个元素。
接受两个一维数组,返回一个平面,这个平面用两个array接受。
8,where
新闻热点
疑难解答