#导入

直接将文本load成numpy.ndarray,如果类型不是默认类型(dtype=float)会导致部分数据nan,skip_footer
world_alcohol = numpy.genfromtxt("world.txt",
									delimiter=",",  			    #以“,”为列的分隔符
									skip_header=1,				  #跳过第一行
									usecols=(0, -1),			    #只读取的列
									dtype="U75",					#设定类型
									names="A, B, C",				#设定列名
									missing_values={0:"N/A", 'b':" ", 2:"???"},  #某列缺失值定义
									filling_values={0:0, 'b':0, 2:-999}		  #某列缺失值替换
									)

#初始化

vector = numpy.array([5, 10, 15, 20])
matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
np.zeros ((3,4))
np.ones( (2,3,4), dtype=np.int32 )
np.arange( 0, 2, 0.3 )		 #0-2,以0.3为步长
np.random.random((2,3))		#2行3列的0-1 array
from numpy import pi
np.linspace( 0, 2*pi, 100 )	#设置100个点
z = np.linspace(0,10,11,endpoint=True,retstep=True)  #生成0~10之间均匀分布的11个数,包括0和10
help(np.linspace)

#常用方法属性

查看维度:vector.shape 查看类型:vector.dtype 更改类型:vector = vector.astype(float)
类型NumPy array必须所有数据是相同类型
a.ndim #查看维度坐标的数量,axes (dimensions)的数量
a.dtype.name
a.size#总数

#索引

vector[1,4]第一行第四列的值,从0开始.vector[0:3]是0-2的数列
matrix[:,1],所有行的第2列,matrix[:,0:2],所有行的1,2列
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
matrix[1:3,1:3]
[[20 25]

 [35 40]]

#比较

vector = numpy.array([5, 10, 15, 20])
vector == 10 -> array([False,  True, False, False], dtype=bool) 比较每一个元素
通过比较的bool结果索引
vector = numpy.array([5, 10, 15, 20])
equal_to_ten = (vector == 10)
print equal_to_ten -> [False  True False False]
print(vector[equal_to_ten]) -> [10]
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
second_column_25 = (matrix[:,1] == 25)
print second_column_25 -> [False  True False]
print(matrix[second_column_25, :]) -> [[20 25 30]]
equal_to_ten_and_five = (vector == 10) & (vector == 5) #进行与或非操作

vector = numpy.array([5, 10, 15, 20])
equal_to_ten_or_five = (vector == 10) | (vector == 5)
vector[equal_to_ten_or_five] = 50
print(vector) -> [50 50 15 20]
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
second_column_25 = matrix[:,1] == 25
print second_column_25 -> [False  True False]
matrix[second_column_25, 1] = 10
print matrix -> 中间25->10

#运算

vector = numpy.array([5, 10, 15, 20])
求和:vector.sum()
求平均:vector.mean()
numpy.exp():返回e的幂次方
matrix.sum(axis=1) # 1是按行相加,0是按列相加
is_value_empty = numpy.isnan(world_alcohol[:,4]) #判断是不是nan,各个位置是bool值
z = np.zeros((5,5))
z += np.arange(5)
print np.arange(5) -> [0 1 2 3 4]
print z
[[0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]]

np.array的+/-/平方**2/开方np.sqrt(A)都是对应元素操作,<>也是对应元素,返回对应的bool值
两种点乘操作:A.dot(B) np.dot(A, B)
A.T #转置
np.floor()#各个元素向下取整

#变形

a = np.arange(15).reshape(3, 5)#更改形状
reshape:有返回值,所谓有返回值,即不对原始多维数组进行修改;
resize:无返回值,所谓有返回值,即会对原始多维数组进行修改;

将多维数组降位一维:
numpy.ravel()   #返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响原始矩阵
numpy.flatten() #返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵

#拼接

np.hstack((a,b))#列相拼接,多了列,行数不变
np.vsplit((a,b))#行拼接,多了行,列数不变
np.vsplit(a,3)#将a从行切出3个array
b = a  #是一个对象 相等 变化牵连
c = a.view() #创建一个新对象 不相等 变化不牵连
d = a.copy() #完全复制一个对象 不相等 变化不牵连
ind = data.argmax(axis=0)  np.argmax(data,axis=0) #array每行上最大数的索引下标
(3,)#一维数组 (1,3)#二维
import numpy as np
data = np.sin(np.arange(20)).reshape(5,4)
print data
[[ 0.          0.84147098  0.90929743  0.14112001]
 [-0.7568025  -0.95892427 -0.2794155   0.6569866 ]
 [ 0.98935825  0.41211849 -0.54402111 -0.99999021]
 [-0.53657292  0.42016704  0.99060736  0.65028784]
 [-0.28790332 -0.96139749 -0.75098725  0.14987721]]
ind = data.argmax(axis=0)
print ind  - > [2 0 3 1]
data_max = data[ind, xrange(data.shape[1])]
print data_max   ->[0.98935825 0.84147098 0.99060736 0.6569866 ]
all(data_max == data.max(axis=0))   -> True

#numpy.tile(A,reps)

numpy.tile(A,reps) #tile共有2个参数,A指待输入数组,reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组。
numpy.tile([1,2,3],2) -> array([1, 2, 3, 1, 2, 3])
numpy.tile([1,2,3],(1,2)) -> array([[1, 2, 3, 1, 2, 3]])
numpy.tile([1,2,3],(2,1)) ->array([[1, 2, 3],[1, 2, 3]])
注意维度:一维数组shape为(3,),扩充至2维则shape值为(1,3),扩充至3维则shape值为(1,1,3)
y = x.argsort() #argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y
a = np.array([4, 3, 1, 2])
j = np.argsort(a)
print j -> [2 3 1 0]
print a -> [4 3 1 2]
print a[j] -> [1 2 3 4]

#sort()

# 直接对对象进行排序,不会产生一个新数组,而是在原数组的基础上进行修改 # None : 如果待排序的对象是一个视图的话,则原始数据将会被修改
obj.sort() # 这种方式会为原数组创建一个已排序的副本,所以并不会对原数组进行修改 np.sort(obj) # 相同之处:两种排序都可以接受一个axis参数,用于对相应的行或者列进行排序 # Note : 两个排序方法都不可以被设置为降序,只能是升序,

ndarray.sort(axis=-1, kind='quicksort', order=None)
或者:ndarray.sort(axis=-1, kind='quicksort', order=None)
参数     描述
axis     排序沿数组的(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认值为-1,表示沿最后的轴排序
kind     排序的算法,提供了快排'quicksort'、混排'mergesort'、堆排'heapsort', 默认为‘quicksort'
order     排序的字段名,可指定字段排序,默认为None

#meshgrid()

[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x)=[X,Y]=meshgrid(x,x)
m, n = (5, 3)
x = np.linspace(0, 1, m)
y = np.linspace(0, 1, n)
X, Y = np.meshgrid(x,y)
X,Y:3行5列

#NumPy 用字符编码来表示数据类型

数据类型     字符编码
整数     		i
无符号整数        u
单精度浮点数      f
双精度浮点数      d
布尔值           b
复数             D
字符串           S
Unicode         U
Void            V

#其他操作:

z[1::2,::2] = 1
z[::2,1::2] = 1
z = np.random.random((10,10))
zmin,zmax = z.min(),z.max()
#归一化,将矩阵规格化到0~1,即最小的变成0,最大的变成1,最小与最大之间的等比缩放
z = 10*np.random.random((5,5))
print z
zmin,zmax = z.min(),z.max()
z = (z-zmin)/(zmax-zmin)
print z
交换第0,1行:a[[0,1]] = a[[1,0]]
#找出数组中与给定值最接近的数
z = np.array([[0,1,2,3],[4,5,6,7]])
a = 5.1
print np.abs(z-a).argmin() -> 5

#判断二维矩阵中有没有一整列数为0?
z = np.random.randint(0,3,(2,10))
print z -> [[1 1 2 0 0 1 1 0 2 2],[0 0 2 1 0 2 1 0 1 0]]
print z.any(axis=0) -> [ True  True  True  True False  True  True False  True  True]
11-08 17:11