1.一维数组的切片和索引
1.1 定义数组,通过下标选择数组的部分元素
import numpy as np
a=np.arange(9)
a1=a[2:7] #选择部分元素
a2=a[:6:2]#下标0-6,隔两个
a3=a[::-1]#反转数组
print(a1)
print(a2)
print(a3)
结果如下
[2 3 4 5 6]
[0 2 4]
[8 7 6 5 4 3 2 1 0]
1.2处理数组形状
a=np.arange(9).reshape(3,3)
b=a*2
print(a)
print(b)
# 水平叠加
np.hstack((a,b))
# concatenate同样可以
np.concatenate((a,b),axis=1)
array([[ 0, 1, 2, 0, 2, 4],
[ 3, 4, 5, 6, 8, 10],
[ 6, 7, 8, 12, 14, 16]])
# 垂直叠加
np.vstack((a,b))
# concatenate同样可以
np.concatenate((a,b),axis=0)
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
# 深度叠加
np.dstack((a,b))
array([[[ 0, 0],
[ 1, 2],
[ 2, 4]],
[[ 3, 6],
[ 4, 8],
[ 5, 10]],
[[ 6, 12],
[ 7, 14],
[ 8, 16]]])
#列式堆叠
oned=np.arange(2)
oned
array([0, 1])
twice_oned=2*oned
twice_oned
array([0, 2])
np.column_stack((oned,twice_oned))
array([[0, 0],
[1, 2]])
np.column_stack((a,b))
array([[ 0, 1, 2, 0, 2, 4],
[ 3, 4, 5, 6, 8, 10],
[ 6, 7, 8, 12, 14, 16]])
# 行式堆叠
np.row_stack((a,b))
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
1.3拆分NumPy数组
# 横向拆分
np.hsplit(a,3)
# 或者用split
np.split(a,3,axis=1)
[array([[0],
[3],
[6]]),
array([[1],
[4],
[7]]),
array([[2],
[5],
[8]])]
# 纵向拆分
np.vsplit(a,3)
# 或者用split
np.split(a,3,axis=0)
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
# 深度拆分
c=np.arange(27).reshape(3,3,3)
np.dsplit(c,3)
[array([[[ 0],
[ 3],
[ 6]],
[[ 9],
[12],
[15]],
[[18],
[21],
[24]]]),
array([[[ 1],
[ 4],
[ 7]],
[[10],
[13],
[16]],
[[19],
[22],
[25]]]),
array([[[ 2],
[ 5],
[ 8]],
[[11],
[14],
[17]],
[[20],
[23],
[26]]])]
2.NumPy数组的属性
b=np.arange(24).reshape(2,12)
# ndim存储的是维度的数量
print(b.ndim)
# siez用来保存元素的数量
print(b.size)
# itemsize可以返回数组种各个元素所占用的字节数
print(b.itemsize)
# nbytes为tiemsize和size属性值之积
print(b.nbytes)
2
24
4
96
3.数组的转换
b=np.array([1.j+1,2.j+3])
array([1.+1.j, 3.+2.j])
# 使用tolist函数可以将NumPy数组转换成python列表
print(b.tolist())
[(1+1j), (3+2j)]
# astype函数将数组元素转换成指定类型
b.astype(int)
array([1, 3])
b.astype('complex')
array([1.+1.j, 3.+2.j])