标签:
Ndarray:多维数组对象
ndarray是一个通用的同构数据多维容器,每个数组均有一个shape(表示维度大小)和dtype(说明数组数据类型的对象):
eg:>>>data.shape
(2,3)
>>>data.dtype
dtype(‘float64‘)
1、创建ndarray
data1创建arr1的ndarray数组
data1 = [1.2,23,3,23,4,6]
arr1 = np.array(data1)
zeros(10,10) 和 ones(10,10) 可以分别创建制定长度、维度的数组,empty可以创建空的数组
numpy关注是数值计算,因此,若没有一般制定,数据类型基本都是float64.
np.arange(15) #返回一个ndarray而不是列表
ndarray的数据类型dtype是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:
arr1 = np.array([1,2,3],dtype=np.float64)
ndarray可通过astype的方法来显式转换其dtype:
float_arr = arr.astype(np.float64)
大小相等的数组之间可以将运算运算到元素级。不同大小的数组之间运算叫做 广播。
2.基本的索引和切片
啊啊啊啊啊啊,坑爹的浏览器,我的笔记全丢了,以后再补吧!
3、布尔型索引
>>> import numpy as np >>> names = np.array([‘Bob‘,‘Joe‘,‘Will‘,‘Bob‘,‘Will‘,‘Joe‘,‘Joe‘]) >>> data = np.random.randn(7,4) >>> names == ‘Bob‘ #产生布尔型数组 array([ True, False, False, True, False, False, False], dtype=bool)
>>> data[names == ‘Bob‘]
array([[ 0.91085438, -0.83674359, 1.2117743 , -0.40052236],
[ 0.2068526 , -0.41068779, 0.83953301, -0.93918484]])
同时可联合切片也可以:
>>> data[names == ‘Bob‘,:2] array([[ 0.91085438, -0.83674359], [ 0.2068526 , -0.41068779]]) >>> data[data<0] = 0 #将小于0的值进行赋值 >>> data array([[ 0.91085438, 0. , 1.2117743 , 0. ], [ 0. , 1.08886269, 1.82398061, 2.28503012], [ 0. , 1.33202507, 0. , 0. ], [ 0.2068526 , 0. , 0.83953301, 0. ], [ 0. , 0.13073222, 0.33671297, 0. ], [ 0. , 0.62412247, 0. , 0. ], [ 0.68182239, 0. , 0. , 0. ]])
4、花式索引
指利用整数数组进行索引,假设现有一个8*4数组:
arr = np.arange(32).reshape((8,4)) >>> arr array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]) >>> arr[[1,5,7,2],[0,3,1,2]] array([ 4, 23, 29, 10])
得到数组的矩形切片
>>> arr[[1,5,7,2]][:,[0,3,1,2]] array([[ 4, 7, 5, 6], [20, 23, 21, 22], [28, 31, 29, 30], [ 8, 11, 9, 10]])
得到上面的结果也可使用此代码
>>> arr[np.ix_([1,5,7,2],[0,3,1,2])] array([[ 4, 7, 5, 6], [20, 23, 21, 22], [28, 31, 29, 30], [ 8, 11, 9, 10]])
5、数组转置和轴对换
T属性:
arr = np.arange(15).reshape((3,5)) >>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) >>> arr.T array([[ 0, 5, 10], [ 1, 6, 11], [ 2, 7, 12], [ 3, 8, 13], [ 4, 9, 14]])
利用np.dot计算矩阵内积:
>>> arr = np.random.randn(6,3) >>> np.dot(arr.T,arr) array([[ 3.67517253, -0.57586473, -3.36499059], [-0.57586473, 9.52179993, -0.74028303], [-3.36499059, -0.74028303, 3.42469162]])
高维数组需要得到一个由轴编号组成的元祖才能进行转置:
arr = np.arange(16).reshape((2,2,4)) >>> arr array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]]) >>> arr.transpose((1,0,2)) array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])
swapaxes方法:
>>> arr.swapaxes(1,2) array([[[ 0, 4], [ 1, 5], [ 2, 6], [ 3, 7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]])
swapaxes 也是返回源数据的视图
标签:
原文地址:http://www.cnblogs.com/groupe/p/4892601.html