Numpy学习-1

Numpy学习-1

数组基础

  • 创建数组

    1 .一维数组的创建

#导入模块
import numpy as np
#使用array()函数创建数组,array的首个参数一定是一个序列,可以是元组也可以是列表。
ls1 = range(10)
list(ls1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
type(ls1)
range
#使用numpy中的arange()函数创建一维有序数组
ls2 = np.arange(10)
list(ls2)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
type(ls2)
numpy.ndarray

从上看出:使用array()函数创建数组,array的首个参数一定是一个序列,可以是元组也可以是列表。

#使用arrray()函数创建数组----由元组序列构成的一维数组
arr1 = np.array((1,20,13,28,22))
arr1
array([ 1, 20, 13, 28, 22])
#使用arrray()函数创建数组----由列表序列构成的一维数组
arr2 = np.array([1,1,2,3,5])
arr2
array([1, 1, 2, 3, 5])



2.二维数组的创建
#使用元组套元组的方式
arr3 = np.array(((1,1,2,3),(5,8,13,21),(34,55,89,144)))
arr3
array([[  1,   1,   2,   3],
       [  5,   8,  13,  21],
       [ 34,  55,  89, 144]])
#使用列表套列表的方式
arr4 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr4
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

3 .numpy提供的几种特殊数组

#返回一维数组全为1的数组
np.ones(3)
array([ 1.,  1.,  1.])
#返回元素全为1的3X4二维数组
np.ones([3,4])
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])
#返回元素全为0的3X4二维数组
np.zeros([3,4])
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
  • 有关数组的属性和函数

1 .属性(方法)

#直接数组名称查看

#shape方法返回数组的行数和列数
arr3.shape   #此处没有(),否则报错
(3, 4)
#dtype方法返回数组的数据类型
arr3.dtype
dtype('int32')
#通过ravel的方法将数组拉直(多维数组将为一维数组)
a = arr3.ravel()
a
array([  1,   1,   2,   3,   5,   8,  13,  21,  34,  55,  89, 144])
#通过flatten方法将数组拉直
b = arr3.flatten()
b
array([  1,   1,   2,   3,   5,   8,  13,  21,  34,  55,  89, 144])

两者的区别在于ravel方法生成的是原数组的视图,无需占有内存空间,但视图的改变会影响到原数组的变化。而flatten方法返回的是真实值,其值的改变并不会影响原数组的更改。

#例子:
b[:3]=0
arr3
array([[  1,   1,   2,   3],
       [  5,   8,  13,  21],
       [ 34,  55,  89, 144]])
a[:3]=0
arr3
array([[  0,   0,   0,   3],
       [  5,   8,  13,  21],
       [ 34,  55,  89, 144]])
arr4.ndim  #返回数组的维数
2
arr4.size   #返回数组元素的个数
12
arr4.T   #返回数组的转置结果
array([[ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11],
       [ 4,  8, 12]])

如果数组的数据类型为复数的话,real方法可以返回复数的实部,imag方法返回复数的虚部。

2.函数

len(arr4)  #返回数组有多少行
3
np.hstack((arr3,arr4))   #横向拼接arr3和arr4两个数组,但必须满足两个数组的行数相同
array([[  0,   0,   0,   3,   1,   2,   3,   4],
       [  5,   8,  13,  21,   5,   6,   7,   8],
       [ 34,  55,  89, 144,   9,  10,  11,  12]])
np.vstack((arr3,arr4))  #纵向拼接
array([[  0,   0,   0,   3],
       [  5,   8,  13,  21],
       [ 34,  55,  89, 144],
       [  1,   2,   3,   4],
       [  5,   6,   7,   8],
       [  9,  10,  11,  12]])
np.column_stack((arr3,arr4))  #与hstack函数具有一样的效果
array([[  0,   0,   0,   3,   1,   2,   3,   4],
       [  5,   8,  13,  21,   5,   6,   7,   8],
       [ 34,  55,  89, 144,   9,  10,  11,  12]])
np.row_stack((arr3,arr4))   #与vstack函数具有一样的效果
array([[  0,   0,   0,   3],
       [  5,   8,  13,  21],
       [ 34,  55,  89, 144],
       [  1,   2,   3,   4],
       [  5,   6,   7,   8],
       [  9,  10,  11,  12]])

reshape()函数和resize()函数可以重新设置数组的行数和列数:

arr5 =np.array(np.arange(24))
arr5  #此为一维数组
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])
a = arr5.reshape(4,6) #reshape函数
a
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]])
a.resize(6,4)  #resize()函数
a
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]])
#tolist将数组转换为列表
b=a.tolist()
type(b)    #'list' object has no attribute 'dtype' 
list
#astype()强制转换数组的数据类型
c = a.astype(float)
print("a数组的数据类型是%s" %a.dtype ,
      "c数组的数据类型是%s" %c.dtype)
a数组的数据类型是int32 c数组的数据类型是float64
  • .数组元素的获取

通过索引和切片的方式获取数组元素

1 . 一维数组元素的获取

arr7 = np.array(np.arange(10))
arr7
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#获取第4个元素
arr7[3]
3
#获取前3个元素
arr7[:3]
array([0, 1, 2])
#获取第4个元素之后的所有元素
arr7[3:]
array([3, 4, 5, 6, 7, 8, 9])
#获取末尾的2个元素
arr7[-2:]
array([8, 9])
#从第1个元素开始,获取步长为2的所有元素
arr7[::2]
array([0, 2, 4, 6, 8])

2.二维数组元素的获取

arr8 = np.array(np.arange(12)).reshape(3,4)
arr8
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr8[:2]   #返回数组的前2行
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
#返回指定的第1行和第3行
arr8[[0,2]]
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11]])
arr8[:,-2:] #返回数组 的后2列
array([[ 2,  3],
       [ 6,  7],
       [10, 11]])
#返回数组的第1列和第3列
arr8[:,[0,2]]
array([[ 0,  2],
       [ 4,  6],
       [ 8, 10]])
#返回数组中第2行第3列对应的元素
arr8[1,2]
6

布尔索引,即索引值为True和False,需要注意的是布尔索引必须输数组对象。

log = np.array([True,False,True])   #返回所有为True的对应行
arr8[log]

array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11]])
arr8[-log]      #通过符号筛选出所有为False的对应行
E:\anaconda\lib\site-packages\ipykernel\__main__.py:1: DeprecationWarning: numpy boolean negative, the `-` operator, is deprecated, use the `~` operator or the logical_not function instead.
  if __name__ == '__main__':





array([[4, 5, 6, 7]])
#举个例子:
area = np.array(['A','B','A','C','A','B','D'])
area
observes = np.array(np.arange(21)).reshape(7,3)
observes
observes[area == 'A']   #返回所有为'A'的观测

array([[ 0,  1,  2],
       [ 6,  7,  8],
       [12, 13, 14]])
#条件值需要在&(and),|(or)两端用圆括号括起来
observes[(area == 'A') | (area == 'D')]
array([[ 0,  1,  2],
       [ 6,  7,  8],
       [12, 13, 14],
       [18, 19, 20]])
#布尔索引也可以与普通索引或切片混合使用:
observes[area == 'A'][:,[0,2]]    #返回A区域的所有行,且只获取第1列与第3列数据。
array([[ 0,  2],
       [ 6,  8],
       [12, 14]])

花式索引:将数组作为索引将原数组的元素提取出来

arr8[[2,1]]   #按照指定顺序返回指定行
array([[ 8,  9, 10, 11],
       [ 4,  5,  6,  7]])
arr8[[2,1]][:,[0,2]]  #返回指定的行与列
array([[ 8, 10],
       [ 4,  6]])
#使用比较简单的方式返回指定行以列的二维数组的话,可以使用ix_()函数
arr8[np.ix_([2,1],[0,2])]
array([[ 8, 10],
       [ 4,  6]])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容