本次学习使用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),)