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