numpy ndarray 数组操作
【目录】
- 数组的索引、切片
- 数组的操作
一、数组的索引、切片(适用于所有序列容器)
- 语法: 序列 [ 起始下标:结束下标:步长 ]
1.1 索引、切片技巧
- [] 内的数字都可以是负的,表示"逆序",必须保证合法的组合才行。
- 默认的步长是1,可以省略
:
。步长取法:起始下标 + n * 步长(n = 0,1,2,3,…) - 得到的结果区间为:
[起始下标, 结束下标)
。左闭右开 - 起始下标和结束下标有 ":",两者中间必须有 ":",省略起始或者结束下标,表示从头开始或者到最后结束
- 多维数组序列切片:"先行后列,逗号隔开"
- [:, [1]] 表示选择第一列的内容
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 3 x 4 的数组矩阵
print(x[:-1:2]) # 表示索引是从0到结尾[10, 11, 12],步长是2。但是返回的区间是左闭右开的规则
# 返回结果
[[1 2 3]
[7 8 9]]
print(x[:, [1]]) # 选择第1列的内容
# 返回结果
[[ 2]
[ 5]
[ 8]
[11]]
# 三维
a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])
# 返回结果
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[12, 3, 34],
[ 5, 6, 7]]])
# 索引、切片
a1[0, 0, 1] # 输出: 2
二、数组的操作
2.1 形状修改
- ndarray.reshape(shape, order)
- 返回一个新的数组对象,不改变原来的数组
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 4 x 3 的数组矩阵
x.reshape([-1, 6]) # 数组的形状被改为(2,6),-1表示通过待计算
print(x.reshape([2, 6]))
# 返回结果
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
- ndarray.resize(new_shape)
- 修改数组本身的形状
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 4 x 3 的数组矩阵
x.resize([3, 4])
print(x)
# 返回结果 3 x 4 的数组矩阵
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
- ndarray.T
- 数组转置
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 3 x 3 的数组矩阵
x.resize([2, 6])
print(x.T)
# 返回结果
[[ 1 7]
[ 2 8]
[ 3 9]
[ 4 10]
[ 5 11]
[ 6 12]]
2.2 类型修改
-
ndarray.astype(type)
- 返回新的数组对象,原数组不改变
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 3 x 3 的数组矩阵
x.resize([2, 6])
print(x.astype(str))
# 返回结果
[['1' '2' '3' '4' '5' '6']
['7' '8' '9' '10' '11' '12']]
- ndarray.tobytes ( [order] )
- 构造包含数组中原始数据字节的Python字节
arr = np.array([1, 2, 3])
print(arr.tobytes())
print(arr.dtype)
# 返回结果
b'\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
int64 --64个bit也就是8字节
2.3 数组去重
-
numpy.unique(arr, return_index, return_inverse, return_counts)
-
去除arr中的重复元素,并且返回一个新的升序的数组
- arr:输入数组,如果不是一维数组则会展开
- return_index:如果为 true,返回新列表元素在旧列表中的位置(下标),并以列表形式存储。
- return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式存储。
- return_counts:如果为 true,返回去重数组中的元素在原数组中的出现次数。
tmp = np.array([1, 3, 3, 2, 2, 5, 6])
print(np.unique(tmp))
# 返回结果
[1 2 3 5 6]