您的位置:首页 > 编程语言 > Python开发

numpy上手笔记

2016-05-03 14:57 597 查看
这是没整理的,要看就看图片,和代码中加注释的部分,代码都是抄书上的,太乱,我的心太乱,要一些空白,

numpy的数据类型:



定义数据,和数据类型

import numpy as np
x = np.float32(1.0)
y = np.int_([1,2,4])
z = np.arange(3,dtype=np.unit8)
z = np.arange(3,dtype='f')
z = np.array([1,2,3],dtype='f')#和上面语句一样的结果


改变数据类型:用.astype()或把数据类型作为一个函数使用

z = np.arange(3, dtype=np.uint8)
z.astype(float)
np.int8(z)


提一下,这里有python对象和dtype对象之分;

>>> z.dtype
dtype(’uint8’)
>>> d = np.dtype(int)
>>> d
dtype(’int32’)
>>> np.issubdtype(d, int)
True
>>> np.issubdtype(d, float)
False


创建数组:一般5种方式创建数组

1.从其他python结构转变,如列表,元祖

>>> x = np.array([2,3,1,0])
>>> x = np.array([2, 3, 1, 0])
>>> x = np.array([[1,2.0],[0,0],(1+1j,3.)]) # note mix of tuple and lists,and types
>>> x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])


2.numpy内置的方式创建,如arange,ones,zeros,

>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(2, 10, dtype=np.float)
array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
>>> np.linspace(1., 4., 6)
array([ 1. , 1.6, 2.2, 2.8, 3.4, 4. ])
>>> np.indices((3,3))
array([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[0, 1, 2], [0, 1, 2], [0, 1, 2]]])


3.从磁盘的标准格式或定制格式

4.从使用了字符串或缓存的原始数据创建数组

这里用到了genfromtxt()函数,而且还要导入StringIO,内容好像蛮多的,得单独整理

5.使用专门库的函数创建,如random

数组的索引

>>> x = np.arange(10)
>>> x.shape = (2,5)
>>> x.reshape(2,5)#和上句一样的效果,但是上句改变了x的形状,此句x依然是原先的一维数组,
>>> x = np.arange(10)
>>> x[2:5]
array([2, 3, 4])
>>> x[:-7]
array([0, 1, 2])
>>> x[1:7:2]#这里注意,python的list是不具有间隔切片
array([1, 3, 5])
>>> y = np.arange(35).reshape(5,7)
>>> y[1:5:2,::3]#别弄错成了y[1:5:2][::3]
array([[ 7, 10, 13],
[21, 24, 27]])
>>> x = np.arange(10,1,-1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[n
4000
p.array([3, 3, 1, 8])]#以3,3,1,8索引位的数创建数组
array([7, 7, 9, 2])
>>> x[np.array([3,3,-3,8])]
array([7, 7, 4, 2])
>>> x[np.array([3, 3, 20, 8])]
<type ’exceptions.IndexError’>: index 20 out of bounds 0<=index<9
>>> x[np.array([[1,1],[2,3]])]
array([[9, 9],
[8, 7]])


多维数组的索引,

乱七八糟的,还是画图吧



>>> y[np.array([0,2,4]), np.array([0,1,2])]#这里的y就是上面创建的5*7的二维数组,这里可以理解成x坐标0,2,4,y坐标0,1,2的三个数
array([ 0, 15, 30])
>>> y[np.array([0,2,4]), np.array([0,1])]
<type ’exceptions.ValueError’>: shape mismatch: objects cannot be broadcast to a single shape
>>> y[np.array([0,2,4]),0:1]
array([[ 0],
[14],
[28]])
>>> y[np.array([0,2,4]), 1]
array([ 1, 15, 29])
>>> y[np.array([0,2,4])]#取0行,2行,4行
array([[ 0, 1, 2, 3, 4, 5, 6],
[14, 15, 16, 17, 18, 19, 20],
[28, 29, 30, 31, 32, 33, 34]])


布尔类型的索引

>>> b = y>20
>>> y[b]
array([21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
>>> b[:,5] # use a 1-D boolean whose first dim agrees with the first dim of y
array([False, False, False, True, True], dtype=bool)
>>> y[b[:,5]]
array([[21, 22, 23, 24, 25, 26, 27],
[28, 29, 30, 31, 32, 33, 34]])
>>> x = np.arange(30).reshape(2,3,5)
>>> x
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]]])
>>> b = np.array([[True, True, False], [False, True, True]])
>>> x[b]
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29]])
>>> y[b[:,5],1:3]
array([[22, 23],
[29, 30]])


貌似有点困难,下面单独看好理解点:

>>> b = y>20
>>> b
array([[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False],
[ True,  True,  True,  True,  True,  True,  True],
[ True,  True,  True,  True,  True,  True,  True]], dtype=bool)
>>> b[:,5]
array([False, False, False,  True,  True], dtype=bool)
>>> y[b[:,5]]#这里就等于y[np.array([False, False, False,  True,  True], dtype=bool)],只取后两行为true的
array([[21, 22, 23, 24, 25, 26, 27],
[28, 29, 30, 31, 32, 33, 34]])
>>>


列表x,其索引x[],括号中的‘,‘表示且的关系,逗号两边可以是一个数,一个切片,一个数组例如,需要注意的是逗号两边同为数组的情况下,数组的长度要一样,并且这个时候

>>> x = np.arange(32)
>>> x[[1,2,5]]
array([1, 2, 5])
>>> x.shape = (4,8)
>>> x[[1,2,0],[3,5]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)
>>> x[[1,2,0],[3,5,2]]
array([11, 21,  2])
>>> x
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]])
>>> x[[1,2]]
array([[ 8,  9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23]])
>>> x[[1,2],[5,7]]
array([13, 23])
>>> x[3,5]
29
>>> x[3][5]
29
>>> x[1,2][5,7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index to scalar variable.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy