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