Python: Numpy详解

本文详细介绍了Python的Numpy库,包括ndarray对象、数组创建、类型转换、矢量化计算、数组索引与切片以及矩阵运算。通过zeros、ones、empty函数创建数组,利用arange生成连续元素,用astype进行类型转换。Numpy的矢量化运算支持元素级别的标量和数组运算,以及'广播'机制。此外,还探讨了数组的切片操作,如一维和二维数组的切片,并介绍了如何对数组进行分割。最后,文章提到了矩阵运算的实例以及随机数的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

numpy(Numerical Python)

numpy提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。

numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

python之numpy的基本使用
记得 import numpy 噢

创建ndarray数组:

data2 = [[1,2,3],[4,5,6]]
y = numpy.array(data2)

print(y)
print(y.dtype)  #打印数组的数据类型
print(y.ndim)   #打印数组的维度
print(y.shape)  #打印数组各个维度的长度,注意y.shape是一个元组

>>>
[[1 2 3]
 [4 5 6]]
int64
2
(2, 3)




创建数组:
1.使用zeros, ones, empty来创建数组:
zeros创建元素全为0的数组
ones创建元素全为1的数组
empty创建没有元素的数组

x=numpy.zeros(5)
print(x)
x=numpy.zeros((2,3))
print(x)

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



2.使用arange生成连续元素

x=numpy.arange(6)
print(x)
x=numpy.arange(0,6,2)
print(x)

>>>
[0 1 2 3 4 5]
[0 2 4]




3.指定ndarray数组元素的类型:
常用类型: int64,float64

x=numpy.array([1.0,3.2,4.5],dtype=numpy.float64)
print(x)
print(x.dtype)

>>>
[1.  3.2 4.5]
float64




4.使用astype复制数组,并转化类型

x=numpy.array([1.0,3.2,4.5],dtype=numpy.float64)
y=x.astype(numpy.int64)
print (y)

>>>
[1 3 4]


5.将字符串元素转换为数值元素:

x=numpy.array(['1','2','3'],dtype=numpy.string_)
y=x.astype(numpy.int64)  #若转换失败经常会报错
print(y)

>>>
[1,2,3]



6.使用其他数组的数据类型作为参数:

x = numpy.array([ 1., 2.6,3. ],dtype = numpy.float32);
y = numpy.arange(3,dtype=numpy.int32);
print (y)
print (y.astype(x.dtype)) #就在这一步
 
[0 1 2]
[ 0.  1.  2.]



7.ndarray的矢量化计算:
矢量运算:相同大小的数组键间的运算应用在元素上
矢量和标量运算:“广播”— 将标量“广播”到各个元素

x=numpy.array([1,2,3])
y=numpy.array([2,1,4])

print(x*2)
print(x>2)
print(x+y)
print(x>y)

>>>
[2 4 6]
[False False  True]
[3 3 7]
[False  True False]



8.ndarray数组的基本索引和切片:
索引实例一

x=numpy.array(([1,2,3],[4,5,6]))
print(x[0][1])
y=x[0]
print(y)

>>>
2
[1 2 3]

 

索引实例二:

array1 = np.arange(0,12).reshape((3,4))
print(array1)
print(array1[1][2])
print(array1[1,2])
print(array1[0,0:2])
print(array1[2])

array2 = array1.flatten() #展开array为一行
print(array2)

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




注意:  :右端是开区间
一维数组的切片:

x=numpy.array([1,2,3,4,5])
print(x[1:3])
print(x[0:3])
print(x[:3])
print(x[2:])
print(x[::2])

>>>
[2 3]
[1 2 3]
[1 2 3]
[3 4 5]
[1 3 5]



二维数组的切片:

x=numpy.array(([1,2,3],[4,5,6]))
print(x[:2,:2])
a=x[:2,:2]
print(a[0][1])

>>>
[[1 2]
 [4 5]]


x=numpy.array([[0,2],[0,4],[5,6]])
x[:2,:1] = [[8],[6]] # 用数组赋值
print (x)

>>>
[[8,2],[6,4],[5,6]]

 

对array进行分割

1.使用np.linspace进行均等分割

a = np.arange(12).reshape((3,4))
print(a)

# 均等分割
b = np.linspace(1,10,15)
print(b)

c = np.linspace(1,10,12).reshape((3,4))
print(c)

>>>
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[ 1.          1.64285714  2.28571429  2.92857143  3.57142857  4.21428571
  4.85714286  5.5         6.14285714  6.78571429  7.42857143  8.07142857
  8.71428571  9.35714286 10.        ]
[[ 1.          1.81818182  2.63636364  3.45454545]
 [ 4.27272727  5.09090909  5.90909091  6.72727273]
 [ 7.54545455  8.36363636  9.18181818 10.        ]]

 

2.    使用 np.split 进行分割

A = np.arange(12).reshape((3, 4))
print(A)
print(np.split(A,2,axis=1)) #纵向分割
print(np.split(A,3,axis=0)) #横向分割
print(np.array_split(A,3,axis=1)) #不等量分割

>>>
[[ 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([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

 

矩阵运算

实例一

m1 = np.array([[1,2],[1,1]])
m2 = np.array([[2,2],[1,1]])
m3 = np.dot(m1,m2) #矩阵相乘
# 或者可以是 m3 = m1.dot(m2)
print(m3)

>>>
[[4 4]
 [3 3]]

 

实例二

A = np.arange(2, 14).reshape((3, 4))
print(A)
print(np.argmin(A))  # 0    求矩阵中最小元素和最大元素的索引
print(np.argmax(A))  # 11
print(A.mean())      # 7.5
print(A.T)

>>>
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
0
11
7.5
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]

 

实例三:

A = np.array([1,1,1])
B = np.array([2,2,2])
print(np.vstack((A,B))) #上下合并 vertical stack
print(np.hstack((A,B))) #左右合并 horizontal stack

print(A[np.newaxis,:])  #array转矩阵
print(A[:,np.newaxis])  #array转成转置矩阵
#print(A.T)   #并没有用
#注意区分如何初始化一个array或者是一个矩阵

M1 = np.array([1,1,1])[:,np.newaxis]
M2 = np.array([2,2,2])[:,np.newaxis]
print(M1)
print(np.concatenate((M1,M2),axis = 0))
print(np.concatenate((M1,M2,M1),axis = 1)) #多个矩阵进行合并

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

 

随机数的生成

randomArray = np.random.random((2,4))
print(randomArray)
print(randomArray.sum())
print(randomArray.min())
print(randomArray.min(axis=0))  #在行(第零维)里面找最小值
print(randomArray.min(axis=1))  #在列(第一维)里面找最小值

>>>
[[0.48227689 0.99524129 0.7384621  0.3943273 ]
 [0.49772793 0.73632905 0.57824485 0.19307704]]
4.615686449183402
0.19307704083522803
[0.48227689 0.73632905 0.57824485 0.19307704]
[0.3943273  0.19307704]

 

 









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值