1. 程式人生 > >Python一些基礎知識

Python一些基礎知識

###python 中[…]

# coding=gbk
'''
Created on 2017年5月9日

'''
from scipy.misc.pilutil import * # read image ,read 會提示錯誤,但是不影響使用
import matplotlib.pyplot as plt   # show image 
import numpy as np # 兩個方法都用
from numpy import *
A = np.zeros((2,3),dtype='float')
C = np.zeros((2,3),dtype='float')
B = np.array(
[[1,2,3],[4,5,6]]) A3 = np.zeros((2,2,3),dtype='float') C3 = np.zeros((2,2,3),dtype='float') B3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) A[0,...] = B[0,...] C[0,:] = B[0,:] A3[0,...] = B3[0,:] C3[:] = B3[...] print A print C print "############################" print A3 print "############################"
print C3

result:

[[ 1.  2.  3.]
 [ 0.  0.  0.]]
[[ 1.  2.  3.]
 [ 0.  0.  0.]]
############################
[[[ 1.  2.  3.]
  [ 4.  5.  6.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]]]
############################
[[[  1.   2.   3.]
  [  4.   5.   6.]]

 [[  7.   8.   9.]
  [ 10.  11.  12.]]]

結果[…]和[:]幾乎具有同樣的效果,其他情況需要待測。

arr.flat


arr1 = np.array([1,2,3])

b = np.zeros(arr1.shape)

b.flat = arr1.flat

print b  # [1,2,3]

詞典dict的get函式

詞典可以通過鍵值對訪問,也可以通過get訪問,區別是:如果元素不存在,通過鍵值對訪問會提示錯誤,但是通過get返回none,當然也可以通過制定引數的形式,來返回你想要的結果。如下:

print dic1.get('xlh','你查詢的內容不存在!')  #存在的時候,返回值
print dic1.get('gyl')                  #預設返回none,
print dic1.get('gyl','你查詢的內容不存在!')  #不存在,返回指定的引數

temp = dic1.get('gyl')

if temp is not None:
    pass # do something

pickle模組

# coding=gbk


from pickle import load,dump

list1 = ['xlh',20,'gyl','21']


with open('text.txt','w') as f:
    dump(list1,f)
    print 'save list1 to text1 file over ....'
    
with open('text2.txt','wb') as f2:
    dump(list1,f2)
    print 'save list1 to text2 file over ...'

python清理變數記憶體

清理變數所佔的記憶體,有兩種方法:

var = None; # method 1
del var   ; # method 2

方法1雖然會留一個變數名,單幾乎不佔記憶體,因此可以忽略。

dlib for python2.7安裝

conda install -c menpo dlib=18.18

copy檔案

import shutil 
filename = 'helloworld.mat'
dstname  = 'D:/helloworld.mat'
shutil.copy(filename,dstname)
print 'copy successfully!'

flatten

from compiler.ast import flatten # 在python3.5下,廢棄
from funcy import flatten, isa # 替代,去pypi下載funcy安裝即可。

同樣的程式碼在兩個不同的環境有不同的結果時

當同樣的程式碼在兩個不同的環境有不同的結果時,請仔細檢查兩個環境中變數的定義的型別是否相同。

python執行字串中的表示式和語句

eval:計算字串中的表示式
exec:執行字串中的語句
execfile:用來執行一個檔案

# 執行表示式
x=1
print eval("x+1")
# 執行語句
exec('pose = np.zeros(shape=[10,2],dtype=np.float32)')
for i in range(npose):
	exec('pose'+str(i)+'np.zeros(shape=[10,2],dtype=np.float32)')

hdf5資料的items()

訪問hdf5裡面有哪些屬性欄位

train_data = h5py.File(train_path)
print(train_data.items())

一維陣列(64,)到二維矩陣(64,1)

>>> import numpy as np
>>> a = np.arange(5)
>>> a.shape
(5L,)
# 方式一:利用 np.expand_dims
>>> np.expand_dims(a, axis=1).shape
(5L, 1L)
# 方式二:利用 np.reshape
>>> np.reshape(a, (-1, 1)).shape
(5L, 1L)
# 方式三:利用 np.newaxis
>>> a[:, np.newaxis].shape
(5L, 1L)
# 方式四:直接操作 shape 屬性
>>> b = a.copy()
>>> b.shape = (-1, 1)
>>> b.shape
(5L, 1L)
>>> a.shape
(5L,)

作者:採石工
連結:https://www.zhihu.com/question/59563149/answer/168674704
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

print 格式化矩陣

利用set_printoptions()設定輸出矩陣的格式化形式

import numpy as np
x=np.random.random(10)
print(x)
# [ 0.07837821  0.48002108  0.41274116  0.82993414  0.77610352  0.1023732
#   0.51303098  0.4617183   0.33487207  0.71162095]

np.set_printoptions(precision=3)
print(x)
# [ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]

獲得當前程式的執行的路徑

import os
path_dir = os.getcwd()

在assert後加入說明,

a = 100
assert a == 1000 , 'please make sure a == 1000'
assert mode in ['training', 'inference']

window 版本的 pythonlib

python裝飾器

*號的使用

def times(msg,time=1):
    print((msg+' ')*time)
times('hello',3)

結果:hello hello hello
3.單個*星號。
情況一:出現在函式定義時的形參上,即*parameter是用來接受任意多個引數並將其放在一個元組中。

def demo(*p): 
    print(p)
demo(1,2,3)

結果:(1, 2, 3)
情況二:函式在呼叫多個引數時(呼叫時),在列表、元組、集合、字典及其他可迭代物件作為實參,並在前面加 *。
如 *(1,2,3)直譯器將自動進行解包然後傳遞給多個單變數引數(引數個數要對應相等)。

def d(a,b,c):
    print(a,b,c)
a = [1,2,3]
d(*a)

結果:1 2 3
4. 兩個 ** 的情況
如: **parameter用於接收類似於關鍵引數一樣賦值的形式的多個實參放入字典中(即把該函式的引數轉換為字典)

def demo(**p):
    for i in p.items():
        print(i)
demo(x=1,y=2)

結果:

('x', 1)
('y', 2)

dir(obj)

dir() 是一個內建函式,用於列出物件的所有屬性及方法。

python中與matlab dir函式相對應的函式為:

frames = glob.glob('%s%s/*.jpg' %(self.path_to_images, video))

利用路徑匯入模組

caffe_root = 'E:/caffe-ssd-windows-master/python/'  # this file is expected to be in {sfd_root}/sfd_test_code/AFW
#caffe_root = '/python'
#import os
#os.chdir(caffe_root)
import sys
#sys.path.insert(0, 'python')
sys.path.insert(0,caffe_root)
import caffe
#help(caffe) #輸出路徑

移除所有的變數


import aflw_version2_angle_radians_correct
import sys
sys.modules[__name__].__dict__.clear()

print('have removed !')