直接进行索引、切片
对象[:, :] -- 先行后列
一维与列表完全一致,多维时同理
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
n[1, 2, -1] = 886
n
n[1][2] = 100
n
切片:
# 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
# 取一行: 索引
print(n[0])
# 取连续多行: 切片
print(n[ 1 : 4 ])
# 取不连续的多行: 中括号
print(n[ [1, 4, 2, 2, 2] ])
# 取一列
print( n[ 1:4 , 0] ) # 取所有行,和第0列
# 取连续的多列: 切片
print( n[ : , 2 : 5] )
# 取不连续的多列: 中括号
print( n[ : , [1, 3, 4]] )
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)