给了一个一维数组和二维数组,然后围绕着数组进行实验
arr = np.arange(16) #生成一维数组
print("arr:\n",arr)
print("arr 的 形状:\n",arr.shape)
print("arr 的 ndim:\n",arr.ndim)
# 获取单个元素---可以通过下标来访问单个元素
data = arr[4]
print("data:\n",data)
data = arr[-1]
print("data:\n",data)
结果
arr:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
arr 的 形状:
(16,)
arr 的 ndim:
1
data:
4
data:
15
也可以
# 获取多个元素---可以通过切片来获取,不包含结束位置
data = arr[4:13:2]
# 如果使用下标形式来获取多个元素,那么需要注意:需要将多个下标组成一个元素传进去--即组成列表
data2 = arr[[4,6,8,10,12]]
print("data:\n",data)
print("data:\n",data2)
结果
data:
[ 4 6 8 10 12]
data:
[ 4 6 8 10 12]
二维数组的索引
# 二维数组的索引
arr = np.arange(16).reshape((4,4))
print("arr:\n",arr)
print("arr 的 形状:\n",arr.shape)
print("arr 的 ndim:\n",arr.ndim)
# 获取第一列元素
data = arr[:,0]# 逗号之前代表行,逗号之后代表列,而且这个叫行列同时索引
data2 = arr[:,0:1]# 逗号之前代表行,逗号之后代表列,而且这个叫行列同时索引
print("data:\n",data)
print("data2:\n",data2)
结果
data:
[ 0 4 8 12]
data2:
[[ 0]
[ 4]
[ 8]
[12]]
# 获取 0 2 行的 前两列
data = arr[[0,2],0:2:1]
data2 = arr[[0,2],[0,1]] # 这个与上一行结果不同
# 这个是 一一对应去取
# data = arr[[0,2],[0,1,2]] # 错误的,如果这样取值,前后的形状必须一致
print("data:\n",data)
print("data2:\n",data2)
结果
data:
[[0 1]
[8 9]]
data2:
[0 9]
data = arr[::2,0:2:1]
data2 = arr[[1,2],1:3]
print("data:\n",data)
print("data2:\n",data2)
结果
data:
[[0 1]
[8 9]]
data2:
[[ 5 6]
[ 9 10]]
arr_mask = np.array([0,1,0,3],dtype=np.bool)
print(arr_mask)
# # --->[0,1,2,3]--->[False True True True]
# # 利用bool数组进行切片
data = arr[arr_mask,:] #第0行不见了
data2 = arr[:,arr_mask] # 第0列不见了
print("data:\n",data)
print("data:\n",data2)
结果
data:
[[ 4 5 6 7]
[12 13 14 15]]
data2:
[[ 1 3]
[ 5 7]
[ 9 11]
[13 15]]
# bool 数组做索引,False 为丢弃, True 为选择
# 三维 或者多维数组
"""
一维 arr[下标/切片]
二维 arr[行下边或者切片,列下标或者切片]
三维 arr[块下标或者切片,行,列]
四维 arr[堆下标或者切片,块,行,列]
"""
# 注意:
# 如果使用下标,会降维度,如果使用切片,维度不变
# bool数组进行索引的时候,需要索引的是二维数组,那么你的bool数组是一维的,
# bool数组的长度 需要与你要切的维度的长度一致
以上便是数组的索引
接下来我们来把二维数组进行展开
import numpy as np
# 创建一个二维数组
arr = np.arange(16).reshape((4,4))
print("arr;\n",arr)
# 进行数组展开
# ravel() --进行将高维度数组 展开为一维,按行展开
print('=======ravel========')
print(arr.ravel())
# flatten() -进行将高维度数组 展开为一维,按行展开---默认为C风格
print('=======flatten========')
print(arr.flatten(order = "C"))
# 按列展开
print(arr.flatten(order = "F"))
结果
arr;
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
=======ravel========
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
=======flatten========
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[ 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15]
数组的组合:
import numpy as np
# 创建数组
arr_1 = np.arange(4).reshape((2,2))
print("arr1:\n",arr_1)
# 创建一个二维数组
arr_2 = np.arange(4,8).reshape([2,2])
arr_3 = np.array([[1,2]])
print("arr2:\n",arr_2)
print("arr3:\n",arr_3)
# 数组组合 ---参数 需要是一个对象---元组对象、或者列表对象
new_arr1 = np.vstack((arr_1,arr_2)) #按照行的方向进行拼接
new_arr2 = np.hstack([arr_1,arr_2]) #按照列的方向进行拼接
new_arr3 = np.concatenate((arr_1,arr_3),axis=0) # (行,列) ---和vstack一样
new_arr4 = np.concatenate((arr_1,arr_2),axis=1) # (行,列) ----和hstack 一样
print("new_arr1:\n",new_arr1)
print("new_arr2:\n",new_arr2)
print("new_arr3:\n",new_arr3)
print("new_arr4:\n",new_arr4)
结果
arr1:
[[0 1]
[2 3]]
arr2:
[[4 5]
[6 7]]
arr3:
[[1 2]]
new_arr1:
[[0 1]
[2 3]
[4 5]
[6 7]]
new_arr2:
[[0 1 4 5]
[2 3 6 7]]
new_arr3:
[[0 1]
[2 3]
[1 2]]
new_arr4:
[[0 1 4 5]
[2 3 6 7]]
接下来就是数组的拆分:
import numpy as np
# 创建一个二维数组
arr = np.arange(16).reshape((4,4))
print("arr:\n",arr)
# 拆分 ----平均拆分,必须能整除,否则报错
new_arr = np.hsplit(arr,4) # 在列的方向上进行分割数组
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))
new_arr2 = np.vsplit(arr,4) # 在行的方向上进行分割数组
print("new_arr2:\n",new_arr2)
print("new_arr2:\n",type(new_arr2[0]))
new_arr3 = np.split(arr,4,axis=0) # 在行的方向上进行分割数组
new_arr4 = np.split(arr,4,axis=1) # 在列的方向上进行分割数组
print("new_arr3:\n",new_arr3)
print("new_arr3:\n",type(new_arr3[0]))
print("new_arr4:\n",new_arr4)
print("new_arr4:\n",type(new_arr4[0]))
结果
arr:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
new_arr:
[array([[ 0],
[ 4],
[ 8],
[12]]), array([[ 1],
[ 5],
[ 9],
[13]]), array([[ 2],
[ 6],
[10],
[14]]), array([[ 3],
[ 7],
[11],
[15]])]
new_arr:
<class 'numpy.ndarray'>
new_arr2:
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]
new_arr2:
<class 'numpy.ndarray'>
new_arr3:
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]
new_arr3:
<class 'numpy.ndarray'>
new_arr4:
[array([[ 0],
[ 4],
[ 8],
[12]]), array([[ 1],
[ 5],
[ 9],
[13]]), array([[ 2],
[ 6],
[10],
[14]]), array([[ 3],
[ 7],
[11],
[15]])]
new_arr4:
<class 'numpy.ndarray'>