Numpy---数组的索引与切片、变形

1. 数组的索引、切片

直接进行索引、切片

对象[:, :] -- 先行后列

一维与列表完全一致,多维时同理

l = [1, 2, 3, 4, 5, 6]
l[0], l[-1]
(1, 6)
n = np.array(l)
n[0], n[-1]
(1, 6)
stock_change = np.random.normal(0, 1, (4, 5))
# 二维数组索引方式:
# 获取第一个股票的前3个交易日的涨跌幅数据
# 二维的数组,两个维度
stock_change[0, 0:3]
# 返回结果:
array([-0.03862668, -1.46128096, -0.75596237])
# 三维
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

根据索引修改数据: 

# 三维
n = np.random.randint(0, 100, size=(4, 5, 6))
n

Numpy---数组的索引与切片、变形_第1张图片

n[1, 2, -1] = 886
n

Numpy---数组的索引与切片、变形_第2张图片

n[1][2] = 100
n

Numpy---数组的索引与切片、变形_第3张图片

切片:

# Python列表中的切片
l = [1, 2, 3, 4, 5, 6, 7, 88, 9]
l[: : -1]  
# 翻转
# [9, 88, 7, 6, 5, 4, 3, 2, 1]
# NumPy 数组
n = np.array(l)
n
# array([ 1,  2,  3,  4,  5,  6,  7, 88,  9])
n[2 : 6], l[: : -1]
# array([ 1,  2,  3,  4,  5,  6,  7, 88,  9])
# 二维 或多维
n = np.random.randint(0, 10, size=(6, 8))
n

Numpy---数组的索引与切片、变形_第4张图片

# 取一行: 索引
print(n[0])
# 取连续多行: 切片
print(n[ 1 : 4 ])
# 取不连续的多行: 中括号
print(n[ [1, 4, 2, 2, 2] ])

Numpy---数组的索引与切片、变形_第5张图片

# 取一列
print( n[ 1:4 , 0] )  # 取所有行,和第0列
# 取连续的多列: 切片
print( n[ : , 2 : 5] )
# 取不连续的多列: 中括号
print( n[ : , [1, 3, 4]] )

2. 数组变形

ndarray.reshape(shape, order)

返回一个具有相同数据域,但shape不一样的视图;行、列不进行互换

注意:在转换形状的时候,一定要注意数组的元素匹配

n = np.arange(1, 21)
n
# array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
#        18, 19, 20])
n.shape
# (20,)
# 变成二维,下面这种方式有返回值,会改变原数组的形状
n2 = np.reshape(n, (4, 5))
n2
# array([[ 1,  2,  3,  4,  5],
#        [ 6,  7,  8,  9, 10],
#        [11, 12, 13, 14, 15],
#        [16, 17, 18, 19, 20]])
n2.reshape(4, -1)
# 使用-1 : 表式任意剩余维度长度,通过计算获得
# array([[ 1,  2,  3,  4,  5],
#        [ 6,  7,  8,  9, 10],
#        [11, 12, 13, 14, 15],
#        [16, 17, 18, 19, 20]])
n2.reshape(2, -1, 2)
# array([[[ 1,  2],
#         [ 3,  4],
#        [ 5,  6],
#         [ 7,  8],
#        [ 9, 10]],
# 
#        [[11, 12],
#         [13, 14],
#         [15, 16],
#         [17, 18],
#         [19, 20]]])

ndarray.resize(new_shape)

修改数组本身的形状(需要保持元素个数前后相同);行、列不进行互换

stock_change.resize([5, 4])
# 查看修改后结果
stock_change.shape
(5, 4)

ndarray.T

数组的转置;将数组的行、列进行互换

stock_change.T.shape
(4, 5)

你可能感兴趣的:(numpy,numpy,python,开发语言)