python中的一些用法總結

來源:互聯網
上載者:User

標籤:data   orm   new   轉換   global   numpy   距離   bsp   strong   

用python寫了一個測試Demo,其中涉及到一些常用的用法,現在記錄在這裡,方便後續查閱:

1 python中全域變數的使用:

引用全域變數,不需要golbal聲明,修改全域變數,需要使用global聲明,特別地,列表、字典等如果只是修改其中元素的值,可以直接使用全域變數,不需要global聲明。

全域變數在所有程式的外部進行定義,再函數內部使用的時候分為兩種情況,一種是只是使用全域變數的值,第二種是對全域變數進行的值進行修改,第一種情況下不會產生歧義,直接使用即可,第二種情況下則有可能會產生究竟是定義一個新變數還是對已有的全域變數的修改,因此需要加上global聲明。如上所述,列表,字典等,如果只是修改其中元素的值,則不需要聲明,直接引用即可。

2 字典按照key進行逆序排序,

排序後的傳回值是一個list,而原字典中的名值對被轉換為了list中的元組,按照value排序只需要將lambda後面的索引換位[1]即可:

sort_sim = sorted(DICT_SIM.items(), key = lambda DICT_SIM:DICT_SIM[0], reverse = True)

3 numpy計算兩個向量之間的cos距離

 

feat_vector = net.blobs[‘color_pool4/3x3_s2‘].data[0]
#print ‘feat_vector is ‘, feat_vector
feat_list = feat_vector.tolist()
np_probe_feat = np.array(feat_list)
vec1 = np_probe_feat.astype(‘float64‘)
#print ‘vec1 is ‘, vec1
for key in DICT_FEAT.keys():
#print ‘DICT_FEAT.keys() is ‘, DICT_FEAT[key]
vec2 = DICT_FEAT[key].astype(‘float64‘)
#print ‘vec2 is ‘, vec2
dis = np.dot(vec1,vec2) / (np.linalg.norm(vec1)*np.linalg.norm(vec2))
4 string的list轉為float型的向量,用於從檔案中讀取變數到vector
while True:
line = f_feat.readline()
if line:
image_name = line[: -1]
image_feat = f_feat.readline()[1:-2]
image_feat = image_feat.strip().split(‘,‘)
image_feat = map(eval, image_feat)
array_feat = np.array(image_feat)
#print ‘array_feat is ‘, array_feat
#save the image name and its feat into the global dict
DICT_FEAT[image_name] = array_feat #no same key, so make no if else
5 PIL類型的image與cv類型的image相互轉換
詳見 http://www.mamicode.com/info-detail-1777172.html
http://blog.csdn.net/dcrmg/article/details/78147219
import cv2
from PIL import Image
import numpy

image = Image.open("plane.jpg")
image.show()
img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV", img)
cv2.waitKey()

import cv2
from PIL import Image
import numpy

img = cv2.imread("plane.jpg")
cv2.imshow("OpenCV", img)
image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()

prob = Image.open(filename)
cv2_prob = cv2.cvtColor(np.asarray(prob), cv2.COLOR_RGB2BGR)
prob_constant = cv2.copyMakeBorder(cv2_prob, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=BORDER_COLOR) #opecv中的補邊操作
prob_PIL = Image.fromarray(cv2.cvtColor(prob_constant, cv2.COLOR_BGR2RGB))
prob_resize = prob_PIL.resize((int(UNIT_SIZE_w), int(UNIT_SIZE_H)), Image.ANTIALIAS)

6 將一個向量寫到txt檔案中,我是先將其轉為了list,然後將list強轉為string,然後寫入到檔案中:
feat_vector = net.blobs[‘color_pool4/3x3_s2‘].data[0]
feat_list = feat_vector.tolist()
wf.write(str(feat_list))

7 利用PIL庫將多張小圖組合成一張大圖:
def pinjie(images, prob, filename, param):
target = Image.new(‘RGB‘, (UNIT_SIZE_w * (NUM_X + 1), UNIT_SIZE_H * NUM_Y))
target.paste(prob[0], (UNIT_SIZE_w * NUM_X, 0, UNIT_SIZE_w * (NUM_X + 1), UNIT_SIZE_H))
for i in range(NUM_Y):
leftup_x = 0
leftup_y = UNIT_SIZE_H * i
rightdown_x = UNIT_SIZE_w
rightdown_y = UNIT_SIZE_H * (i + 1)
for j in range(NUM_X):
count = j + i * NUM_Y
target.paste(images[count], (leftup_x, leftup_y, rightdown_x, rightdown_y))
leftup_x = leftup_x + UNIT_SIZE_w
rightdown_x = rightdown_x + UNIT_SIZE_w
quality_value = 100
target.save(param + (filename.strip().split(‘/‘))[-1] + ‘_merge.jpg‘, quality = quality_value)
 
 

 

python中的一些用法總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.