1、Numpy中的ndarry是一個多維數組,該對象由兩部分組成:1、實際的數據2、描述這些數據的元素
2、hibernate映射文件處理大型文件
3、numpy.arange(n) **2 的意思是將循環中的所有數平方
numpy.arange(n) 相加是將每個元素都相加
#向量相加 def pythonsum(n): a = range(n) b = range(n) c= [] for i in range(len(a)): a[i] = i**2 b[i] = i**3 c.append(a[i] + b[i]) return c import numpy as np def numpysum(n): a = np.arange(n) **2 print a print type(a) b = np.arange(n) **3 print b c = a + b return c a=pythonsum(10) print a b = numpysum(10) print b

4、效率比較

import sys from datetime import datetime size = 1000 start =datetime.now() c = pythonsum(size) delta = datetime.now() - start print delta start2 =datetime.now() d = numpysum(size) delta2 = datetime.now() - start2 print delta2
5、numpy 數組
a.dtype 查看數組類型int(32) 數組類型都是int
a.shape 查看數組維度 (5l,)一維長整型
6、創建多維數組
import numpy as np m = np.array([np.arange(2),np.arange(2)]) print m print m.shape print m.dtype

np.zeros(10)

np.zeros((3,6))

np.empty((2,3,2))

np.arange(15)

7、多維數組的索引
import numpy as np a = np.array([[1,2],[3,4]]) print a[1,0]
第一個是行 第二個代表的是列
8、numpy數據類型

np.arange(7,dtype=np.uint16) 指定存儲類型
9、數據類型的轉換
都是數字可以這么用

import numpy as np a = np.array([[1,2],[3,4]]) print a[1,0]
一般都是dtype = np.string_
10、數據類型對象
a.dtype.byteorder 符合類型
a.detype.itemsize 大小
11 創建自定義數據類型
#創建自定義數據類型 t = np.dtype([('name', np.str_, 40), ('numitems', np.int32), ('price', np.float32)]) print t print t['name'] itemz = np.array([('Meaning of life DVD', 42, 3.14), ('Butter', 13, 2.72)], dtype=t) print itemz[1]
12、數組與python的列差距很大
兩個數組的加減乘除其實是兩個元組中每一項的加減乘除
不用大小的兩個數組的運算叫做廣播
切片的另一種形式:
s= slice(3,7,2) a[s]
多維數據
b= np.arange(24).reshape(2,3,4) 兩個sheet 每個有3行4列
b[1,2,3] 6
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
randn(7,4) 7*4 的正太分布 里面數據符合正太分布
data[name == "Bob"] 判斷沒人位置上的值 對應的是Ture 或false
#布爾型索引
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']) data = randn(7, 4) names data names == 'Bob' data[names == 'Bob'] #names中的長度必須和 date中的行數一樣不然會報錯 相當於給每一行起了一個名字 data[names == 'Bob', 2:] data[names == 'Bob', 3] names != 'Bob' data[-(names == 'Bob')] #表示不等於 與上面達到的效果一樣 mask = (names == 'Bob') | (names == 'Will') #選擇符合兩者的條件 mask data[mask] data[data < 0] = 0 #全部數據中選擇數據修改 data data[names != 'Joe'] = 7 data
花式索引:利用整數數組去進行索引
#花式索引 arr = np.empty((8, 4)) for i in range(8): arr[i] = i arr arr[[4, 3, 0, 6]] 第 4,3,0,6 行 arr[[-3, -5, -7]] arr = np.arange(32).reshape((8, 4)) arr arr[[1, 5, 7, 2], [0, 3, 1, 2]] #第一行 第0個 一次類推查找 arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] #第一行 第一行數據按0, 3, 1, 2 順序展示 arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])] #將兩個數組,組成一個用於選取的方形矩形區域的索引器,效果同上
數組的轉置 行列互換
arr = np.arange(15).reshape((3, 5))
arr
arr.T
#改變數組的維度
b = np.arange(24).reshape(2,3,4) #按照reshape 的維度來生成數組 arange 里面的長度要跟reshape外面的長度一樣 print b print b.ravel() #高偉數組轉換為以為數組 print b.flatten() #高偉數組轉換為以為數組 b.shape = (6,4) #將其轉化成6*4的多維數組 print b print b.transpose() #轉置 b.resize((2,12)) #直接修改所操作的數組 b會變化 print b
#組合數組
水平組合
print np.hstack((a, b))
print np.concatenate((a, b), axis=1)
數值組合
print np.vstack((a, b))
print np.concatenate((a, b), axis=0)

深度組合 就是將一系列的數組沿着他的縱軸(深度的方向)進行重疊組合
print np.dstack((a, b)

列組合:把一維數組看成新數組的一個列

二維數組列組合和水平組合一樣
print np.column_stack((a, b)) == np.hstack((a, b))

行組合 同上
print np.row_stack((oned, twice_oned))
#數組的分割
水平方向划分
a = np.arange(9).reshape(3, 3) print a print np.hsplit(a, 3) print np.split(a, 3, axis=1)

縱向
print np.vsplit(a, 3) print np.split(a, 3, axis=0)

深度分割 每一個維度的每一列組成一個數組拿出來,多個同一列的數組組合組成一個數組的維度,然后進行下一列,生成多個維度
c = np.arange(27).reshape(3, 3, 3) print c print np.dsplit(c, 3) [array([[[ 0], [ 3], [ 6]], [[ 9], [12], [15]], [[18], [21], [24]]]), array([[[ 1], [ 4], [ 7]], [[10], [13], [16]], [[19], [22], [25]]]), array([[[ 2], [ 5], [ 8]], [[11], [14], [17]], [[20], [23], [26]]])]
數組的屬性
#數組的屬性 b=np.arange(24).reshape(2,12) b.ndim #數組維度 b.size #數組元素總個數 b.itemsize #每一個元素占據的字節數 b.nbytes #整個數組所占據的存儲空間 b = np.array([ 1.+1.j, 3.+2.j]) b.real #實部 b.imag #虛部 b=np.arange(4).reshape(2,2) b.flat #扁平迭代器 類型 b.flat[2] #將數組展開成一維數組,取第二個值 b.flat[1,2] #包括開始和結束 b.flat[2] = 7 #賦值運算
數組的轉換
#數組的轉換 b = np.array([ 1.+1.j, 3.+2.j]) print b print b.tolist() #轉換成Python的列表 print b.tostring() #轉換成相應的字符串 print np.fromstring('\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00\x00@', dtype=complex) print np.fromstring('20:42:52',sep=':', dtype=int) #轉換成整值 print b print b.astype(int) #虛數轉實數 虛部會被丟棄 [1 3] 中間會有空格 類型numpy.ndarray 會有數據丟失的風險 print b.astype('complex') #實數轉換成虛數 array([ 1.+0.j, 3.+0.j])
