Numpy数组索引,切片
目录
1、数组的索引、切片
2、形状修改
2.1、reshape产生新变量
2.2、resize对原来的值更改
2.3、对象.T 行列互换
3、类型修改
4、数组去重
案例:随机生成8只股票2周的交易日涨幅数据
8只股票,两周(10天)的涨跌幅数据,如何获取?
- 两周的交易日数量为:2 x 5 =10
- 随机生成涨跌幅在某个正态分布内,比如均值0,方差1
股票涨跌幅数据的创建
#创建符合正态分布的8只股票10天的涨跌幅数据
stock_change = np.random.normal(0,1,(8,10))
1、数组的索引、切片
获取第一个股票的前3个交易日的涨跌幅数据
stock_change = np.random.normal(0,1,(8,10))
print(stock_change)
#前两行,前三列
print(stock_change[0:2,0:3])
[[ 1.12394621 -1.04031368 0.36764702] [ 1.02665258 0.10936393 -0.60080044]]
一维、二维、三维的数组如何索引?
#三维、一维
a1 = np.array([[[1,2,3],[4,5,6]],[[12,3,34],[5,6,7]]])
#返回结果
print(a1)
#索引,切片
print(a1[0,0,1])
[[[ 1 2 3] [ 4 5 6]] [[12 3 34] [ 5 6 7]]]
2
直接索引:先对行进行索引,再对列索引
高维数组索引,从宏观到微观
2、形状修改
2.1、reshape产生新变量
让刚才的股票行、日期列反过来,变成日期行,股票列
ndarray.reshape(shape[,order]) Returns an array containing the same data with a new shape.
stock_change = np.random.normal(0,1,(4,5))
print(stock_change)
stock_change1=stock_change.reshape((5,4))
print(stock_change1)
#数组的形状被修改为:(-1,10),-1:表示任意行,10列
stock_change2 = stock_change.reshape([-1,10])
print(stock_change2)
#结果:
[[-0.70266113 0.46159659 -0.57158758 1.14324823 0.58823451]
[ 0.37716067 1.33302183 1.75063939 -0.74459641 -0.09467174]
[-1.0439025 -1.59436974 -2.2568172 0.054607 1.48849735]
[-0.55605432 -0.0989349 -0.24215587 -0.9290203 0.24837257]]
[[-0.70266113 0.46159659 -0.57158758 1.14324823]
[ 0.58823451 0.37716067 1.33302183 1.75063939]
[-0.74459641 -0.09467174 -1.0439025 -1.59436974]
[-2.2568172 0.054607 1.48849735 -0.55605432]
[-0.0989349 -0.24215587 -0.9290203 0.24837257]]
[[-0.91604531 0.06804916 1.78633022 -0.58213791 0.62690856 -0.36411872
0.34743397 0.6593866 0.80505992 -0.32396958]
[ 0.49811428 0.58661614 0.61119679 -2.71677913 -0.23923261 0.49370257
1.87903936 -0.42859548 -0.18577446 0.90177403]]
2.2、resize对原来的值更改
stock_change = np.random.normal(0,1,(4,5))
print(stock_change)
stock_change.resize([5,4])
print(stock_change)
#结果
[[-0.57182911 -1.77164866 1.18507269 0.33190734 -0.00394657]
[-0.42081382 -0.80186828 1.55734915 -0.28490936 0.16291166]
[ 1.57257788 -0.14054978 1.68932649 -0.30459803 -0.45543504]
[-0.6768611 0.32870436 0.53034852 -0.66281005 -1.2117197 ]]
[[-0.57182911 -1.77164866 1.18507269 0.33190734]
[-0.00394657 -0.42081382 -0.80186828 1.55734915]
[-0.28490936 0.16291166 1.57257788 -0.14054978]
[ 1.68932649 -0.30459803 -0.45543504 -0.6768611 ]
[ 0.32870436 0.53034852 -0.66281005 -1.2117197 ]]
2.3、对象.T 行列互换
stock_change = np.random.normal(0,1,(4,5))
print(stock_change)
print(stock_change.T)
#结果
[[-0.86553816 0.55346042 0.56523021 -0.09101496 0.0197601 ]
[-0.90455738 1.06210378 1.09616162 0.92801266 -1.28119137]
[-1.26146448 -1.26698952 0.58345693 -1.56389163 0.38198146]
[-0.01172948 -1.29798964 0.17463605 0.49773272 0.78079976]]
[[-0.86553816 -0.90455738 -1.26146448 -0.01172948]
[ 0.55346042 1.06210378 -1.26698952 -1.29798964]
[ 0.56523021 1.09616162 0.58345693 0.17463605]
[-0.09101496 0.92801266 -1.56389163 0.49773272]
[ 0.0197601 -1.28119137 0.38198146 0.78079976]]
3、类型修改
1)ndarray.astype(type) 指定类型
stock_change = np.random.normal(0,1,(4,5))
print(stock_change.dtype)
#num = np.array(stock_change)[0,0]
#print(type(num))
print(stock_change.astype(np.int32))
2)ndarray.tostring()数组转换字符串
arr = np.array([[[1,2,3],[4,5,6]],[[12,13,14],[5,6,7]]])
print(arr.tostring())
#结果
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\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00'
4、数组去重
arr = np.array([[[1,2,3],[4,5,6]],[[12,13,14],[5,6,7]]])
print(np.unique(arr))