Numpy 基础
博客专区 > demonpro 的博客 > 博客详情
Numpy 基础
demonpro 发表于5个月前
Numpy 基础
  • 发表于 5个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

 

 

1.生成numpy数组 

data = [[1, 3, 5, 7.0], [9, 11, 13, 15], [17, 19, 21, 23]] 
data = np.array(data)

[[ 1 3 5 7] 
[ 9 11 13 15] 
[17 19 21 23]]

data1 = array([[1, 3, 5, 7], [9, 11, 13, 15], [17, 19, 21, 23]])

创建数组时指定类型 
a1 = np.array([1, 2.3], dtype=float)

在从1到3中产生9个数,等差数列 
np.linspace(1, 3, 9)

生成首位是10的0次方,末位是10的2次方,含5个数,等比数列 
np.logspace(0, 2, 5)

根据矩阵的行号列号应用到func生成矩阵的元素 
def func(i, j): 
return i + j 
np.fromfunction(func, (5, 6)) 
[[ 0. 1. 2. 3. 4. 5.] 
[ 1. 2. 3. 4. 5. 6.] 
[ 2. 3. 4. 5. 6. 7.] 
[ 3. 4. 5. 6. 7. 8.] 
[ 4. 5. 6. 7. 8. 9.]]

随机数生成 
见附件8

np.random.normal(size=(4,4))

2.numpy数组基础函数 
data.shape:查看数组的行列属性

(3,4)

data.dtype:数组的数据类型

int32

data.ndim:数组的维度

2

np.zeros((3, 4)):生成全零二维数组

[[ 0. 0. 0. 0.] 
[ 0. 0. 0. 0.] 
[ 0. 0. 0. 0.]]

np.ones((2, 3)):生成全一二维数组

[[ 1. 1. 1.] 
[ 1. 1. 1.]]

np.empty((2, 2, 3)):生成空三维数组(里面有随机值)

[[[ 0. 0. 0.] 
[ 0. 0. 0.]]

np.arange(10):生成1到10的以为数组

[0 1 2 3 4 5 6 7 8 9]

np.eye(3):生成二维数组,单位向量

[[ 1. 0. 0.] 
[ 0. 1. 0.] 
[ 0. 0. 1.]]

np.identity(4):同上,生成二维数组,单位向量

[[ 1. 0. 0. 0.] 
[ 0. 1. 0. 0.] 
[ 0. 0. 1. 0.] 
[ 0. 0. 0. 1.]]

对数组中的数据类型进行转换,此时产生一个新的数组,而不是原数组的视图。 
数组中数据类型向下转型时可能会丢掉部分数据。 
numpy还可以将a数组的类型复制到b数组上。

a1 = a1.astype(‘c8’) 
b.astype(a.dtype)

3.切片 
切片得到的是数组的视图,改变切片的值,同时会改变数组的值。 
对于一位数组:

data1[2]:第三个数 
data1[5:8]:得到编号为5到7的数 
data1[5:8]=12:将编号为5到7的数都改为12 
data1[5:]:得到编号为5以及后面的数组成的数组

对于二维数组:

data2 = [[][]] 
data2[0]:拿到一个向量 
data2[0][2]:拿到第一个向量的第三个元素 
data2[0,2]:拿到第一个向量的第三个元素 
data2[:2,1:]: 
data2[:,:1] 
data2[1,2:] 
name!=”Bob”与-(name==”Bob”)相同 
在numpy中布尔条件使用&,|,不能用and和or 
data2[data2<0]=0:将小于0的都置为0 
通过布尔索引创建的数据总是创建数据的副本。

花式索引:

data = 
[[ 1. 0. 0. 0.] 
[ 0. 1. 0. 0.] 
[ 0. 0. 1. 0.] 
[ 0. 0. 0. 1.]]

data[[2,0]]:取第三行和第一行的数据 
[ [ 0. 0. 1. 0.] 
[ 1. 0. 0. 0.]]

data[[-3,-1]]:取倒数第三行和倒数第一行

data2 = 
[[ 0 1 2 3] 
[ 4 5 6 7] 
[ 8 9 10 11] 
[12 13 14 15] 
[16 17 18 19] 
[20 21 22 23] 
[24 25 26 27] 
[28 29 30 31]]

第一个参数是选取行数,第二个参数是从选取到的每一行中选对应的列 
print(data2[[1, 5, 7, 2], [0, 3, 1, 2]]) 
[ 4 23 29 10]

先选取行数,在把选取的行数按第二个参数进行列排列 
print(data2[[1, 5, 7, 2]][:, [0, 3, 1, 2]]) 
[[ 4 7 5 6] 
[20 23 21 22] 
[28 31 29 30] 
[ 8 11 9 10]]

同上,先选取行数,在把选取的行数按第二个参数进行列排列 
print(data2[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]) 
[[ 4 7 5 6] 
[20 23 21 22] 
[28 31 29 30] 
[ 8 11 9 10]]

4.变换

各种矩阵转置方法,都是返回数据的视图 
data.T 
data.transpose() 
data.transpose(1,0,2) 
data.swapaxes(1,0)

5.ufunc 
ufunc函数式将算法应用到每一个元素上

一元ufunc: 
见附录3

np.exp(data) 
np.modf(data)

二元ufunc: 
见附录4

np.maximum(x,y) 
np.copysign(x,y) 
data2 = array([[1, 3, 5, 7], [9, 11, 13, 15], [17, 19, 21, 23]]) 
data3 = array([[17, 19, 21, 23]]) 
data4 = array([[17, 19], [17, 19], [17, 19]]) 
纵向合并,将矩阵加到横轴,需要纵轴shape相等 
print(np.vstack((data2, data3))) 
print(np.concatenate((data2, data3), axis=0)) 
[[ 1 3 5 7] 
[ 9 11 13 15] 
[17 19 21 23] 
[17 19 21 23]] 
横向合并,将矩阵加到纵轴,需要横轴shape相等 
print(np.hstack((data2, data4))) 
print(np.concatenate((data2, data4), axis=1)) 
[[ 1 3 5 7 17 19] 
[ 9 11 13 15 17 19] 
[17 19 21 23 17 19]]

6.计算 
where函数:

如果满足cond条件,就取x中的元素,不然就取Y中的元素。 
np.where(cond,x,y)

统计方法: 
见附录5 
data.mean():求整个矩阵的均值 
np.mean(data) 
data.mean(axis=1):只求列的均值 
(data>0).sum():求矩阵中正值的个数

bools = np.array([False,False,True]) 
检查是否含有true 
bools.any() 
检查是否都为true 
bools.all()

排序 
data.sort() 
data.sort(1)

返回去重之后的数组 
data.unique(bools)

矩阵乘积 
data1.dot(data2) 
np.dot(data1,data2)

一个二维数组和一个大小合适的一维数组的矩阵点积运算后得到一个一维数组 
x = np.array([1,2,3],[4,5,6]) 
print(np.dot(x,np.one(3))) 
[6,15]

7.读取文件

np.read_csv() 
np.read_table() 
np.loadtxt(‘a.txt’,delimiter=’,’) 
np.savetxt()

附录 
附录1:数组创建函数

Alt text

附录2:numpy的数据类型

Alt text

Alt text

附录3:一元ufunc

Alt text

Alt text

附录4:二元ufunc

Alt text

附件5:基本数组统计方法

Alt text

Alt text

附件6:数组的集合运算

Alt text

附件7:常用的numpy.linalg函数

Alt text

附件8:部分numpy.random函数

Alt text

Alt text

共有 人打赏支持
粉丝 0
博文 1
码字总数 1299
×
demonpro
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: