本节主要介绍Numpy中的复制操作、最值、排序。
1复制
1.1简单复制
a = np.arrange(12)
b = a
#a and b are two names for the same ndarray objects
print (b is a)
#True
b.shape = 3,4
print(a.shape)
#(3,4)
- b = a为简单赋值,本质上只是将b指向了a所创建的对象,没有进行任何的复制操作
- 因此,无论是对两者其中任意一个进行操作,最终两者都会发生改变
1.2浅复制
c = a.view()
#True
print (c is a)
#[[0 1 2 3 4 5],[6 7 8 9 10 11]]
c.shape = 2,6
#(3,4)
print(a.shape)
c[0,4] = 1234
#[
#[0 1 2 3],
#[1234 5 6 7],
#[8 9 10 11]
#]
print (a)
- c = a.view() 完成了浅复制操作,使其指向了不同的对象,但却共用同一份值
- 由于指向了不同的对象,因此改变c的形状并不会影响a的形状
- 但由于共用同一份值,因此改变c的值会影响到a的值
1.3深复制
d = a.copy()
此为深复制,可以理解为一种初始化的手段,自此之后,两者再无任何关系
2 寻找每行/列最大值
import numpy as np
data = np.sin(np.arrange(20)).reshape(5,4)
#求每一列最大值所对应的索引 相当于拿到了每一列最大值所在的行数
ind = data.argmax(axis = 0)
#取到每一列最大的数据
data_max = data[ind, range(data.shape[1])]
3.扩展
a = np.arrange(0,40,10)
#[0 10 20 30]
b = np.tile(a,(2,2))
#[[0 10 20 30 0 10 20 30],[0 10 20 30 0 10 20 30]]
4.排序
a = np.array([[4,3,5],[1,2,1]])
#按行排序
b = np.sort(a,axis=1)
a = np.array([4,3,1,2])
#拿到了从小到大索引值的排序
j = np.argsort(a)