numpy 快速入门 常用操作汇总

本文介绍了如何使用NumPy库进行数组转换、形状操作、基本运算、索引与迭代,包括ndarray的基本属性、创建全零全一矩阵、数列生成、矩阵运算、随机数生成、以及重要的索引和统计功能,适合初学者和进阶者参考。
摘要由CSDN通过智能技术生成

常用属性
arr = np.array([…],dtype = ) 后文arr就是ndarray
1.np.array( list ) 把list变为ndarray
2.arr.shape eg:(2,3) 元组 2x3矩阵
arr.size 元素个数arr.dim 维度 (2维矩阵 [ [],[] ] 3维矩阵 [
[ [ ],[ ],[ ] ] ,
]

arr的type叫做dtype 可取: np.int (int64) np.int32 np.float16,np.float(64)等
arr.dtype属性

生成ndarray

a = np.zeros( shape ) shape是元组 全0矩阵
a = np.ones( (3,4) ,dtype = np.int16) 3行4列的全1矩阵
a = np.arange( begin(0),end,step(1) ) 等差数列
end - begin)/step = 元素个数
a = np.arange(12) 12个元素 0~11
可以使用 a.reshape((3,4)) 3行4列

生成线段
a = np.linspace(1,10, 20(段数)) 1~10分为20段 1段0.45
a = 1. 1.476545 1.948465 … 共20个

只要改变ndarray的形状都可以用reshape()方法

基础运算 a,b 两个ndarray

矩阵加法:a + b
矩阵幂 :b**2 (二次方)
c = 10*np.sin( a ) 对每个a的值求sin,然后乘以10得出的新ndarray
cos,tan同理。

b = np.arange(4)
小于3的元素判断 ( 比较运算符=》 对每个元素的判断)
print(b<3) >>> [true,true,true,false] 是个bool数组
print(b==3)同理。

矩阵运算

a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))

*:  逐个相乘
c = a*b

矩阵乘法:(点乘)
c = np.dot(a,b)
or
c = a.dot(b)

随机数

a = np.random.random( shape )返回一个shape的随机数矩阵a
np.sum(),np.max(),np.min()求出矩阵中的这些值 (对每个值)
axis = 0, 行 =1 列
np.sum(a,axis = 1) 对每一列求和
np.min(a,axis = 0) 对每一行寻找最小值

重要运算(索引)

A = np.arange(2,14).reshape((3,4))  12个元素 三行四列  2~13
[
  [2,3,4,5],
  [6,7,8,9],
  [10,11,12,13]
]

计算最小值的索引(第多少个,平铺数组)
np.argmin(A)  A中最小元素的索引>>> 01个
np.argmax(A)   A中最大元素的索引>>> 11
np.mean(A)  or A.mean()    矩阵所有元素的平均值  
np.median(A)  中位数 
np.sort(A) 对A排序(默认对各行排序,不是平铺)
np.transpose(A) or A.T A转置
np.clip(A,minV,maxV)把A中所有小于minV的值都替换为minV,大于maxV的都换为maxV 

不常用:
np.diff(A)   ai和ai+1的差
np.cumsum(A)  累加   eg:第一列变成:[2,5,9,14]

以上操作都可以用axis只针对某维做相应计算

索引(切片)与迭代

A = np.arange(3,15)
A[3]=>   6

A = np.arange(3,15).reshape((3,4))
A[2] = [11,12,13,14]
A[2][1] or A[2,1] = 12
[begin]:(end)   切片(:  默认 所有值)
A[2,:] = A[2]  
A[:,0]  第一列的所有值。 [3,7,11]
A[1,1:3]  第一行的第23个的值


遍历/迭代:

此时对A进行迭代,迭代的是行(二维)
for row in A:
 ...
如何迭代列?  先转置为A.T,再迭代即可。
for column in A.T:
...

如何迭代每个元素?平铺为一维数组(A.flat)    然后迭代。
for item in A.flat:
  ....

两个array合并

A = np.array([1,1,1])   shape:(3,)
B = np.array([2,2,2])

向下合并 np.vstack()

C = np.vstack(A,B) shape:(2,3)
C =
[
[1,1,1]
[2,2,2]
]

横向合并 np.hstack()

D = np.hstack(A,B) shape:(6,)
D = [1 1 1 2 2 2]

多array合并 np.concatenate((a1,a3,…),axis = )

E = np.concatenate((A,B,A),axis = 0) 行上合并
[1 1 1 2 2 2 1 1 1]

import numpy as np
A = np.array([[1],[1],[1]])   
B = np.array([[2],[2],[2]])
C = np.concatenate((A,B,A),axis = 1)
print(C)

[[1 2 1]
[1 2 1]
[1 2 1]]

numpy分割array

import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.split(A,2,axis = 1))  # 对A数组 axis=1 按列 2个2个切割(等量分割)

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])] #这两个array一定是等大小的,否则会报错

不等量分割:
np.array_split(A,3,axis=1)

import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.array_split(A,3,axis=1))  # 对A数组 axis=1 按列 2个2个切割

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]

纵向分割:np.vsplit(A,纵向分成多少个array) 一定是axis = 1的分割
同理有np.hsplit(A,个数)

import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.vsplit(A,3))  # 对A数组 axis=1 按列 2个2个切割
print(np.hsplit(A,2))

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
3个数组

[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]

2个数组

赋值

import numpy as np
A = np.arange(4)
b =A
c = b

A[0] = 11
print(A,b,c)

= 就是引用。浅拷贝。
若要深拷贝:
b = A.copy() 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值