乍见之欢
ndarray是什么
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。ndarray对象是一个快速而灵活的数据集容器。
创建ndarray数组
通过numpy中的array函数就可以创建ndarray数组。
注:numpy能将序列数据(列表,元组,数组等)转化为ndarray数组。
实例:
import numpy as np
data1=[1,3,5,7,9]#列表类型
data2=(0,2,4,6,8)#元组类型
data3=[[1,3,5,7,9],[0,2,4,6,8]]#多维数组
array1=np.array(data1)
array2=np.array(data2)
array3=np.array(data3)
print(array1)
print(array2)
print(array3)
运行结果:
[1 3 5 7 9]
[0 2 4 6 8]
[[1 3 5 7 9]
[0 2 4 6 8]]
当创建好ndarray数组时,会同时存储ndarray的shape和dtype,shape为数组维度大小和长,dtype为ndarray的数据类型。
例:
import numpy as np
data=[1,3,5,7,9]
array=np.array(data)
print(array)
print(array.shape)
print(array.dtype)
运行结果:
[1 3 5 7 9]
(5,)
int32
当数组中有整形和浮点型数据时,dtype数据类型为浮点型。
例:
import numpy as np
data=[1,3,5.3,7,9]
array=np.array(data)
print(array)
print(array.shape)
print(array.dtype)
运行结果:
[1. 3. 5.3 7. 9. ]
(5,)
float64
除了np.array方法创建数组外,还可以使用其他一些函数创建,例:zeros函数,zeros函数可以创建指定长度全为0的数组。ones函数,可以创建指定长度全为1的数组。empty函数,可以创建一个没有具体数值得数组。arange函数类似于range。
import numpy as np
array1=np.zeros(5)
array2=np.zeros((3,5))
array3=np.ones(5)
array4=np.ones((3,5))
array5=np.empty((3,3,3))
array6=np.arange(5)
print(array1)
print(array2)
print(array3)
print(array4)
print(array5)
print(array6)
运行结果:
[0. 0. 0. 0. 0.]
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[1. 1. 1. 1. 1.]
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
[[[6.23042070e-307 1.89146896e-307 1.37961302e-306]
[6.23053614e-307 6.23053954e-307 9.34609790e-307]
[8.45593934e-307 9.34600963e-307 9.34603000e-307]]
[[9.34593493e-307 1.86920872e-306 6.23054972e-307]
[1.42419530e-306 8.90098127e-307 8.01106038e-307]
[8.45603441e-307 6.23059726e-307 2.22522597e-306]]
[[1.06810268e-306 6.23052935e-307 1.33511562e-306]
[6.89805151e-307 2.22522597e-306 1.33511969e-306]
[8.34426039e-308 2.10081501e-312 2.10081501e-312]]]
[0 1 2 3 4]
ndarray数据类型转换
数组的数据类型有很多种,常见的数据类型为:整数(int)浮点数(float)复数(complex)布尔值(bool)字符串(_string)
数据类型转换函数astype
实例:
import numpy as np
data=[1,3,5.3,7,9]
array=np.array(data)
print(array.dtype)
运行结果:
float64
转换为整数
import numpy as np
data=[1,3,5.3,7,9]
array=np.array(data)
print(array)
print(array.dtype)
array=array.astype(np.int)
print(array)
print(array.dtype)
运行结果:
[1. 3. 5.3 7. 9. ]#转换前
float64#类型
[1 3 5 7 9]#转换后
int32#类型
注:浮点数转化为整数时,小数点后全部截断。不是四舍五入。
久处不厌
数组变换
数组重塑
对于定义好的数组可以使用reshape方法改变数组维度。
实例:
import numpy as np
array=np.zeros(10)
print(array)
print(array.reshape((5,2)))
运行结果:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]]
多维数组同样也可以重塑。
相反的数据散开函数ravel,扁平化flatten函数
import numpy as np
array=np.zeros(10)
print(array)
print(array.reshape((5,2)))
print(array.ravel())
print(array.flatten())
运行结果:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
数组合并
数组的合并用于几个数组间的操作,concatenate方法通过指定轴方向,即将多个数组合并在一起。
import numpy as np
array1=np.arange(10).reshape((5,2))
print(array)
array2=np.arange(10,20).reshape(5,2)
print(array2)
print(np.concatenate([array1,array2],axis=0))
运行结果:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
[[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]
数组合并也可以使用vstack和hstack
import numpy as np
array1=np.arange(10).reshape((5,2))
print(array)
array2=np.arange(10,20).reshape(5,2)
print(array2)
print(np.vstack([array1,array2]))
运行结果同上。
import numpy as np
array1=np.arange(10).reshape((5,2))
print(array)
array2=np.arange(10,20).reshape(5,2)
print(array2)
print(np.hstack([array1,array2]))
运行结果:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
[[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]
[[ 0 1 10 11]
[ 2 3 12 13]
[ 4 5 14 15]
[ 6 7 16 17]
[ 8 9 18 19]]
数组拆分
使用split方法进行拆分。
import numpy as np
array1=np.arange(10).reshape((5,2))
array2=np.arange(10,20).reshape(5,2)
a=np.hstack([array1,array2])
b=np.split(a,[2,3])
print(b)
运行结果:
[array([[ 0, 1, 10, 11],
[ 2, 3, 12, 13]]), array([[ 4, 5, 14, 15]]), array([[ 6, 7, 16, 17],
[ 8, 9, 18, 19]])]
数组转置
使用transpose方法可以实现转置。
import numpy as np
array=np.arange(10).reshape((5,2))
print(array)
a=array.transpose((1,0))
print(a)
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
[[0 2 4 6 8]
[1 3 5 7 9]]
T属性同样可以用来转置。