numpy基础

ndarray数组(c语言实现的)

import numpy as np

#实例化 np.ndarray类的对象:ary 就是ndarray数组
ary = np.array([1,2,3,4,5,6])
print(ary,type(ary))	#打印结果为:[1 2 3 4 5 6]  <class 'numpy.ndarray'>

ndarray存储方式,对列表的存储方式进行了优化

分为元数据 和 实际数据,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能

  1. 元数据:
    1. size:元素个数
    2. data:存指向实际数据的引用
    3. shape:维度(修改维度只是访问方式的变换)
    4. dtype:数据类型,将该ndarray中存放的数据类型定死,好处是索引起来方便,且修改维度不需要改变数据位置
类型名类型表示符
布尔型bool
有符号整数型int8(-128~127)/int16/int32/int64
无符号整数型uint8(0~255)/uint16/uint32/uint64
浮点数float16/float32/float64
复数型complex64/complex128
字串型str_,每个字符用32位Unicode编码表示

数据类型简写

类型字符吗
np.bool?
np.int8/16/32/64i1/i2/i4/i8 (数字表示字节数)
np.uint8/16/32/64u1/u2/u4/u8
np.float/16/32/64f2/f4/f8
np.complex64/128c8/c16
np.strU<字符串>
np.datetime64M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s]

类型字符码格式

字符码释义
3i4大端字节序,3个元素的一维数组,每个元素都是整型,每个整型元素占4个字节
<(2,3)u8小端字节序,6个元素2行3列的二维数组,每个元素都是无符号整型,每个无符号整型元素占8个字节
U7包含7个字符的Unicode字符串,每个字符占4个字节,采用默认字节序
  1. 实际数据:存具体数组数据

ndarray数组对象的创建

import numpy as np
#1. 使用np.array()创建
a = np.array([1,2,3,4,5,6])

#2. np.arange(起始值(0),终止值,步长(1))
import numpy as np
a = np.arange(0,5,1)

#3. np.zeros(数组元素格式(维度),dtype='类型')	#输出的所有元素都是0
a = np.zeros(10)

#4. np.ones(数据元素格式(维度),dtype='类型“),输出的所有元素为1
a = np.ones((2,3),dtype='xxx')

#4. np.ones_like() 和np.zeros_like()
ary = np.array([1,2,3],[4,5,6])
ol = np.ones_like(ary)	#构造元素全为1,其他属性和ary一样的ndarray对象
print(ol)

ndarray对象属性的基本操作

import numpy as np

#1. 维度操作
ary = np.arange(1,9)
ary.shape = (2,4)
print(ary,ary.shape)

#2. 元素的类型
#方案1:ary.dtype = 'float32',不好
#方案2:
ary = ary.astype('float32')

#3. size:数组元素个数
print(ary,'size:',ary.size,'len():',len(ary))

#4. 数组元素索引(下标)
print(ary[0],'<- ary[0]')
print(ary[0][1],'<-ary[0][1]')
print(ary[0,1],'<- ary{0,1]')

#5. 迭代
ary = np.arange(1,28)
ary.shape = (3,3,3)
print(ary)

#6.遍历三维数组
for i in range(ary.shape[0]):
	for j in range(ary.shape[1]):
		for k in range(ary.shape[2]):
			print(ary[i,j,k],end=' ')

#7. 转置
ary.T			

ndarray对象的运算

ary = np.array([1,2,3,4,5,6])
print(ary + 2) #[3 4 5 6 7 8]每个元素都加2
#相减也是每个元素都减2
print(ary * 3) #[3 6 9 12 15 18] #每个元素都 *3
print(ary > 3) #[False False False True True True]

日期类型处理

import numpy as np

#第一种方式,不易读
data = [('zs', [90, 80, 85], 15)]
a = np.array(data, dtype='U3, 3int32, int32')	#dtype申明了数据类型
#第二种方式
b = np.array(data, dtype={'names': ['name', 'scores', 'ages'],'formats': ['U3', '3int32', 'int32']})
print(c[0]['name'], ":", c[0]['scores'], ":", c.itemsize)

#处理日期类型
dates = np.array(['2011','2011-02','2011-03-01','2011-04-01 11:11:11','2012']
print(dates,dates.dtype)	#打印出来dtype:U19(str类型)
#转为日期类型datetime64[x],x可为D,S,M精确到时分秒等
dates = dates.astype('datetime64[D]')
print(date,dates.dtype)	#打印出来格式:2011-01-01,数据类型为datetime64[D]
#日期类型计算
print(dates[-1] - dates[0])

ndarray数组对象的维度操作

import numpy as np

#视图变维(数据共享)
ary = np.arange(1,13)
print(ary,ary.shape)	#维度为(12,)
#视图变维
ary2 = ary.reshape(3,4)
print(ary2,ary2.shape)	#维度为(3,4)
#ary2和ary维度不同但是共享数据,任一个把数据改了,另一个也会变
ary[0] =99
print(ary2,ary2.shape)	#修改了ary,ary[2]也变了
print(ary2,ravel())	#将数组撑平成1维数组

# 复制变维
print(ary2,flatten())	#数据和原ndarray对象独立,修改数据不会影响原数据

#就地变维:直接改变原ndarray对象的维度,不返回新数组
ary.shape = (2,3,2)
ary.resize(3,2,2)

一维数组组合

a = np.arrange(1,9)
b = np.arrange(9,17)
#把两个数组摞在一起成两行
c = np.row_stack((a,b))
#把两个数组组合在一起,两个数组相应位置上的值重新组合成一行,最终形成两列
d = np.column_stack((a,b))
print(d)	#[[1,9],[2,10]...[9,17]]

多维数组的组合与拆分

垂直方向操作

import numpy as np

a = np.arange(1,7).reshape(2,3)
b = np.arange(7,13).reshape(2,3)
#垂直方向完成组合操作,生成新数组
c = np.vstack((a,b))
#垂直方向完成拆分操作,生成两个数组
d,e = np.vsplit(c,2)

水平方向操作

import numpy as np

a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 水平方向完成组合操作,生成新数组 
c = np.hstack((a, b))
# 水平方向完成拆分操作,生成两个数组
d, e = np.hsplit(c, 2)

深度方向操作(3维)

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 深度方向(3维)完成组合操作,生成新数组
i = np.dstack((a, b))
# 深度方向(3维)完成组合操作,生成新数组
k, l = np.dsplit(i, 2)

多维数组组合与拆分的相关函数:

#通过axis作为关键字参数指定组合的方向
#axis=0表示垂直方向,1表示水平方向,2表示深度方向
np.concatenate((a,b),axis=0)
# 通过给出的数组与要拆分的份数,按照某个方向进行拆分
np.split(c, 2, axis=0)
numpy函数

numpy.random
提供了normal函数用于产生符合正太分布的随机数

n = 100
x = np.random.normal(172,20,n)
y = np.ramdom.normal(60,10,n)
#第一个参数:正太分布的期望值(向该数靠拢)
#第二个参数:标准差(标准查越小,数字的分布越向期望值靠拢,标准差越大(振幅越大),数字分布越广泛)
#第三个参数:数字生成数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值