Numpy学习笔记

本文介绍了使用Python的NumPy库进行数组操作的基础知识,包括创建数组、填充值、类型转换、生成序列和随机数。还详细讲解了数组的属性,如类型、形状、大小和维度。此外,文章涵盖了数组的索引、切片以及一维和二维的花式索引,以及如何利用布尔数组进行索引选择。最后提到了where语句在查找数组中非零元素的索引时的应用。
摘要由CSDN通过智能技术生成

本次学习使用spyder编译器

 1、numpy数组的基本操作:

import numpy as np
a = np.array([1,2,3,4,5])
d=a**2  
b=np.zeros(5)   #生成元素个数为5的全0数组,类型为'浮点数'
c=np.ones(5,dtype='int')    #生成元素个数为5的全1数组,类型为'整数'
print(a)
print(b)
print(c)
print(d)
[1 2 3 4 5]
[0. 0. 0. 0. 0.]
[1 1 1 1 1]
[ 1  4  9 16 25]

 ------------------------------------------------------------分割线-----------------------------------------------------------

import numpy as np
a = np.array([1,2,3,4,5])
a.fill(2)
b = np.array([3,3,3,3,3])
b.fill(4.5)
print(a)
print(b)
[2 2 2 2 2]
[4 4 4 4 4]

Tips:与列表不同,数组中要求所有元素dtype都是一样的,若传入参数与数组类型不一样,则按照已有的类型进行转换,格式为(x.astype('type'))

import numpy as np
a = np.array([1,2,3,4,5])
a=a.astype('float')
a.fill(2.5)
a
array([2.5, 2.5, 2.5, 2.5, 2.5])

 ------------------------------------------------------------分割线-----------------------------------------------------------

import numpy as np
a = np.arange(1,10,2)      #生成整数序列,左闭右开,第三参数为步长
b = np.linspace(1,10,10)   #生成等差序列,左闭右开,第三参数为元素个数
c = np.random.rand(10)     #生成随机数,默认区间为[0,1),参数为个数
print(a)
print(b)
print(c)
[1 3 5 7 9]
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
[0.28011977 0.12396827 0.42643533 0.03236536 0.25157802 0.63193654
 0.73816141 0.6149231  0.52702016 0.09039063]

2、numpy数组属性

单维数组:

基本操作

import numpy as np
a = np.linspace(1,10,21)
a
type(a)   #查看数组类型
a.dtype   #查看数组中的数据类型
a.shape   #查看形状,会返回一个元组,每个元素代表这一维的元素数目
a.size    #查看数组里面元素的数目
a.ndim    #查看数组的维度
array([ 1.  ,  1.45,  1.9 ,  2.35,  2.8 ,  3.25,  3.7 ,  4.15,  4.6 ,
        5.05,  5.5 ,  5.95,  6.4 ,  6.85,  7.3 ,  7.75,  8.2 ,  8.65,
        9.1 ,  9.55, 10.  ])
numpy.ndarray
dtype('float64')
(21,)
21
1

 ------------------------------------------------------------分割线---------------------------------------------------------- 

单维数组索引切片

import numpy as np
a=np.array([x0,x1,x2,x3])
a[i]         #数组索引
a[i]=x       #数组元素值的修改
a[i:j:k]     #数组切片 

------------------------------------------------------------分割线----------------------------------------------------------

多维数组(仍可用array生成)

基本操作

import numpy as np
a = np.array([x0,x1,x2],[y0,y1,y2],[z0,z1,z2])
a.shape     #查看多维数组形状
a.size      #查看总的元素个数
a.ndim      #查看维度
array([[x0,x1,x2],
       [y0,y1,y2],
       [z0,z1,z2]])
(3,3)                   #(row,column),row由[]数量决定,column由[]内的元素个数决定
9
2                       #该数组维度为2,而不是3

多维数组索引

import numpy as np
a = np.array([[1,2,3,4],[11,12,13,14]])
a[1,3]             #多维数组索引,前个参数表示索引第2行,后个参数表示第4个元素
a[1]               #索引第2行的的值
a[:,1]             #索引第2列所有元素,   :表示从第一个到最后一个,1表示第2列
14
array([11,12,13,14])
array([2,12])

多维数组切片

import numpy as np
a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
a[0,3:5]        #得到第1行第4个和第5个元素
a[-2:,-2:]      #得到最后2行最后2列的元素
a[2::2,::2]     #得到第3,第5行奇数列
                #通式 a[lower:upper:step]  
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
array([3, 4])
array([[44, 45],
       [54, 55]])
array([[20, 22, 24],
       [40, 42, 44]])

------------------------------------------------------------分割线----------------------------------------------------------

Tips:切片在内存中使用的引用机制,而这种现象在列表中不会发生

import numpy as np
a = np.array([1,2,3,4,5,6,7])
b = a[0:2]
b[1] = 100
a
print(b)
 array([  1, 100,   3,   4,   5,   6,   7])
[  1 100]

------------------------------------------------------------分割线----------------------------------------------------------

一维花式索引

import numpy as np
a = np.arange(0,100,10)
index=[1,2,-3]
y = a[index]
print(a)
print(y)
[ 0 10 20 30 40 50 60 70 80 90]
[10 20 70]

还可以使用布尔数组进行花式索引(mask必须是布尔数组,长度必须和数组长度相等)

与切片不同,花式索引返回的是原对象的一个复制而不是引用

import numpy as np
a = np.arange(0,100,10)
mask = np.array([0,1,1,1,0,0,0,0,0,1],dtype=bool)
mask
a[mask]
array([False,  True,  True,  True, False, False, False, False, False,
        True])
array([10, 20, 30, 90])

------------------------------------------------------------分割线----------------------------------------------------------

二维花式索引

import numpy as np
a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
a[(0,1,2,3,4),(1,2,3,4,5)]
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
array([ 1, 12, 23, 34, 45])           #索引结果

 布尔数组进行花式索引

import numpy as np
a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
mask = np.array([1,0,1,0,1,1],type='bool')
a[mask,2]        #表示在行上用布尔索引,在列上则为第3列  [row,column]
array([ 2, 22, 42, 52])

------------------------------------------------------------分割线----------------------------------------------------------

where语句(会返回所有非零元素的索引)

import numpy as np
a = np.array([0,12,5,20])
a>10              #返回数组里大于10的元素的索引位置
a[a>10]           #返回数组里大于10的元素值
np.where(a>10)    #返回一个元组,返回的是索引位置,[1,3]是索引位置
array([False,  True, False,  True])
array([12, 20])
(array([1, 3], dtype=int64),)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值