numpy數(shù)組不可以擴(kuò)展
可是它最大的缺點(diǎn)就是不可動態(tài)擴(kuò)展——“NumPy的數(shù)組沒有這種動態(tài)改變大小的功能,numpy.append()函數(shù)每次都會重新分配整個數(shù)組戒劫,并把原來的數(shù)組復(fù)制到新數(shù)組中善玫。
http://blog.chinaunix.net/uid-23100982-id-3164530.html
numpy數(shù)組的展平
可以用flatten禁悠,也可以用numpy.ravel()
比如下面這個數(shù)組
arr = np.arange(10).reshape(1,2,5)
Out[40]:
array([[[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]])
可以使用fatten和ravel函數(shù)進(jìn)行展平
arr.flatten()
numpy.ravel(arr)
Out[41]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy數(shù)組合并
如果只有兩個元素刮便,那么用append合并就行
如果有三個或者以上的元素讹蘑,那么用numpy.concatenate這個函數(shù)
numpy.concatenate((a1, a2, ...), axis=0)
把n個數(shù)組放到一個tuple里面怀樟,作為一個大參數(shù)(a1, a2, ...)放到concatenate這個函數(shù)里面
python list 合并
python list合并,可以用append,extend,也可以直接用+號進(jìn)行
z=x+y
numpy 數(shù)組的初始化和循環(huán)填充
有的時候想新建個array功偿,然后通過循環(huán)不斷append補(bǔ)充這個數(shù)組。后來看到stackoverflow上說這個是非常低效率的往堡。
numpy的array一般是先初始化好尺寸的數(shù)組脖含,全附上0罪塔,然后再一個一個修改這個值。而不是不斷的擴(kuò)充數(shù)組結(jié)構(gòu)养葵。
比如下面這個就是不太推薦的寫法
big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
array i of shape = (2,4) created.
add to big_array
參考http://stackoverflow.com/questions/4535374/initialize-a-numpy-array
python目錄遍歷
一個用os庫
一個用glob庫
list,array,dataframe,mat 幾個容器的使用
list如果能用就用征堪,最底層,效率也最高的元素关拒,而且支持字符和數(shù)字混搭
np的array付給他更多的操作佃蚜,但是不支持字符,需要chararray才能混搭着绊,chararray其實(shí)功能不是特別強(qiáng)大谐算,所以不推薦numpy的數(shù)組里面混搭文字和數(shù)字
np的dataframe適合大小規(guī)模的選擇和操作,但是不適合一點(diǎn)點(diǎn)增添归露,最好是先把一個大的array都鼓搗好了一個洲脂,一整個array直接全塞進(jìn)去。
所以基本是簡單的數(shù)據(jù)用list剧包,需要做處理的中低層的數(shù)據(jù)用array恐锦,然后燴成一鍋全裝進(jìn)dataframe做大規(guī)模范圍的數(shù)據(jù)分析。 如果需要矩陣操作的時候才使用numpy的mat
這是我的理解疆液。
許多python和numpy對某個數(shù)據(jù)的處理一铅,不會改變數(shù)據(jù)本身,而是把結(jié)果拷貝出來輸出給其他對象
比如s.join('something')
arr.append(arr2)
對dataframe columns的選擇
dataframe一般都是根據(jù)標(biāo)簽選擇列堕油,比如dataframe['feature1']
同時也可以使用ix潘飘,按照列數(shù)進(jìn)行選擇,比如選擇第一列和第二列 df.ix[:,0:2]
如果選擇的是多個列掉缺,那么會返回的是dataframe對象
而如果只選擇一個列卜录,那么會返回series對象,這個比較蛋疼眶明。
python format字符串的輸出
str.format() //str是字符串
- format函數(shù)前的str字符串可以用{}來做占位符
‘a(chǎn) is {}暴凑,b is {}’.format(a,b)
- 也可以在{}里面加數(shù)字用來和后面的變量進(jìn)行對應(yīng)
‘a(chǎn) is {1},b is {2}, a is {1}’.format(a,b)
還可以用講里面的數(shù)字視為對象本身
比如lis=['xiaoming','xiaowang']
‘my name is {0[0]}赘来,his name is {0[1]}’.format(lis){}里面還可以對輸出的精度和進(jìn)制進(jìn)行輸出
'the number is {:.2f}'.format(332.245)
'the binary value of the number is {:b}'.format(332.245)
dataframe之間做運(yùn)算现喳,要用到.values 除法
for i in range(len):
df3[i]=df1[i]-df2[i].values
一個dataframe,和另一個dataframe的values才可以做直接的運(yùn)算
dataframe的slicing
df=pd.DataFrame()
df[1] #這個是不行的
df[1:2] #這樣才行 有頭有尾才行 或者寫成df.ix[1,:] #最好用index進(jìn)行slice的犬辰,都用.ix這個函數(shù)進(jìn)行slice嗦篱,這樣規(guī)范一些。
dataframe每行都減去前一行 怎么實(shí)現(xiàn)(第一行保持原值
方法一:用index進(jìn)行整體減法
df[:-1] -df[1:]
方法二: 自己笨笨的寫循環(huán)唄幌缝。
for i in range(1,length):
df.ix[i,:]-df.ix[i-1,:]
方法三:調(diào)用shift方法灸促,
df-df.shift(1) #df.shift(1) 就是df整體下移的結(jié)果,至于新dataframe的首行則為nan,需要自己再手動賦0
df.fillna(inplace=True, method='ffill') inplace就是自己替換自己了
兩個120的數(shù)組如何合成一個220的數(shù)組浴栽?用asarray
np.asarray(np.random.randn(10),np.random.randn(10))