numpy 數組的處理方式


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
numpy.arange

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])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM