1. 程式人生 > >Numpy之不同複製操作的比較

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]                                                                             #得到最後數字從小到大的排序。