Numpy之不同複製操作的比較
(1)直接進行賦值
a = np.arange(12)
b = a
print(b is a) #結果為True
b.shape = 3,4
print(a.shape) #會發現a也隨著發生變化
print(id(a)) print(id(b)) #a的值與b的值指向同一片記憶體區域,實際上完全一樣(除了名字)
(2)淺複製
c = a.view()
print(c is a) #結果為False,所以a和b不是同一個值,但是他們會共用同一片資料區域。
c.shape = 2,6
print(a.shape) #結果為4,3說明a與b的id不是指向同一片記憶體區域,但是當更改c的值時,a的值也會發生相應的變化
(3)copy式複製
d = a.copy() #對a進行復制,把a的值給d
d is a #結果為False,說明a和d不是指向同一個記憶體區域
d[0, 0] = 99 #把d的第0行,第0列的元素改為99,a中的元素不會因為d中的元素改動而發生改動。
(4)找出矩陣中每列的最大數
data = np.sin(np.arange(20).reshape(5,4)) #把生成20個數據,按照5行4列的方式排列
ind = data.argmax(axis = 0) #找出每列的最大數所在的行數,並給ind
data_max = data[ind, range(data.shape([1]))] #按照最大數所在的行和列找到最大數,並且將資料返回
(5)行和列擴大相應倍數
a = np.arange(0, 40, 10)
b = np.tile(a, (2,2)) #行數擴大2倍列數擴大2倍
(6)把陣列按照相應的行和列進行排序
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) #從數字最小的位置寫到數字最大的位置(索引位置)
結果為:
[2, 3, 1, 0] #最小的數所處位置在第二位,然後是第三位。。。最後是在第0位
a[j] #得到最後數字從小到大的排序。