使用numpy.array()
来创建一个数组。传入的数据可以是一个元组或列表。
numpy数组的索引
这里以二维数组为例,坐标(行数,列数)
array1 = numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
array1 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
array1[0,0] = 1
,array1[3,1] = 14
,
array1[:,[3,0]] = [[4,8,12,16],[1,5,9,13]]
array1[[3,1],[0,2]] = [13,7]
——》[array1[3,0],array1[1,2]]
:
表示不做取值要求。
array1[:,1:2] = [[2,3],[6,7],[10,11],[14,15]]
还能进行逻辑运算!
(array1 >= 5) =
array([[False, False, False, False],
[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True]])
array1[array1 >=5 ] = [5,6,7,8,9,10,11,12,13,14,15,16]
array1[~(array1 >= 5)] = [1, 2, 3, 4]
array1[(array1 > 4) & (array1 <= 10) & (array1 != 8)] = [ 5, 6, 7, 9, 10]
花式索引
-1
表示倒数第一行,-2
表示倒数第二行… …
np.ix_([0,-1],[0,1,3])
# 输出
(array([[ 0],
[-1]]),
array([[0, 1, 3]]))
array1[numpy.ix_([0,-1],[0,1,3])] = array([[1,2,4],[13,14,16]])
flatten()
,ravel()
和reshape()
flatten()
返回一个一维数组,不改变原数组,使用order = "F"
来按纵向降维。ravel()
返回一个原数组的一维视图,更该此视图会影响原来的数组,使用order = "F"
来按纵向降维。reshape()
将数组重组,返回原数组的一个视图,更改此视图会影响原来的数组。reshape(-1)
可以达到ravel()
的效果。
合并
横向合并np.hstack()
传入一个元组,元组中为要合并的数组。数组的行数要相等!
import numpy as np
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr3 =np.array([[1,2],[3,4],[5,6],[7,8]])
print(np.hstack((arr3,arr2)))、
# 输出
[[ 1, 2, 1, 2, 3],
[ 3, 4, 4, 5, 6],
[ 5, 6, 7, 8, 9],
[ 7, 8, 10, 11, 12]]
纵向合并np.vstack()
传入一个元组,元组中为要合并的数组。数组的列数要相等!
import numpy as np
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr3 =np.array([[1,2,3],[4,5,6],[7,8,9]])
print(np.vstack((arr3,arr2)))
# 输出
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
使用concatenate((...),axis=...)
来指定数组合并的轴向。
竖轴是0轴,横轴是1轴… …
numpy.concatenate((array1,array1),axis = 0)
# 返回
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
numpy.concatenate((array1,array1),axis = 1)
# 返回
array([[ 1, 2, 3, 4, 1, 2, 3, 4],
[ 5, 6, 7, 8, 5, 6, 7, 8],
[ 9, 10, 11, 12, 9, 10, 11, 12],
[13, 14, 15, 16, 13, 14, 15, 16]])
不能在合并的数组所不存在的轴向上合并!
numpy.concatenate((array1,array1),axis = 2)
AxisError: axis 2 is out of bounds for array of dimension 2
复制
使用tile()
来使数组在指定方向上复制指定倍。
# 把array1在0轴上复制到两倍,在1轴上复制到4倍
numpy.tile(array1,(2,4))
# 返回
array([[ 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
[ 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8],
[ 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12],
[13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16],
[ 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
[ 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8],
[ 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12],
[13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16]])
数组形状改变reshape()
与resize()
reshape()
返回原数组的视图,resize()
直接改变原数组。
array1 = numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
array1.reshape(2,8)
# 返回
array([[ 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16]])
array1 = array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
array1.resize(2,8)
# 无返回
array([[ 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16]])
array1 = array([[ 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16]])
使用numpy.newaxis
在当前数组创建新维度,并返回一个新数组。
array1 = numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
array1[:,numpy.newaxis]
# 返回
array([[[ 1, 2, 3, 4]],
[[ 5, 6, 7, 8]],
[[ 9, 10, 11, 12]],
[[13, 14, 15, 16]]])
numpy.newaxis
放在不同的位置会有不同的效果,可以根据需求在行或列上创建新的维度。
判断数组
shape
返回数组情况的元组,ndim
返回数组维数
numpy.array([[[ 1, 2, 3, 4]],
[[ 5, 6, 7, 8]],
[[ 9, 10, 11, 12]],
[[13, 14, 15, 16]]]).shape
# 返回
(4,1,4)
# 即每个维度上数的个数分别为4,1,4
numpy.array([[[ 1, 2, 3, 4]],
[[ 5, 6, 7, 8]],
[[ 9, 10, 11, 12]],
[[13, 14, 15, 16]]]).ndim
# 返回
3
# 此数组有三个维度
多维数组
array2 = numpy.arange(8).reshape(2,2,2)
# array2
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
我们来把它切一下
array2[0]
# 返回
array([[0, 1],
[2, 3]])
array2[1]
# 返回
array([[4, 5],
[6, 7]])
array2[:,0]
# 返回
array([[0, 1],
[4, 5]])
array2[:,1]
# 返回
array([[2, 3],
[6, 7]])
array2[:,:,0]
# 返回
array([[0, 2],
[4, 6]])
array2[:,:,1]
# 返回
array([[1, 3],
[5, 7]])
array2[0,1,1]
# 返回
3
我们使用灵魂绘图来理解一下