MegaMU个人站

欢迎光临

落日黄沙 白帆秋水 你可知谁的记忆在时空里飞?


关于数组的一二三

目录

使用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] = 1array1[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=...)来指定数组合并的轴向。

image

竖轴是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

我们使用灵魂绘图来理解一下

souldraw

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦