numpy学习笔记

本文介绍了NumPy库在Python中的核心功能,如数组创建、维度操作、基本运算、随机数生成、统计分析、索引与合并,以及浅拷贝与深拷贝的区别。涵盖了ndarray的形状、维度、大小,以及常见操作如加减乘除、排序、矩阵运算等。

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

以下代码用的是jupyter notebook 编译
有些代码是连续的 所以就没有完全打进去
有些print省略

1. array(数组)

import numpy as np 
a = np.array([[1,2,3],[2,3,4]])
a

输出:
array([[1, 2, 3],
       [2, 3, 4]])


"number of dimension",array.ndim
"shape:",array.shape
"size",array.size

输出:
('number of dimension', 2) 
('shape:', (2, 3))
('size', 6)

1、array.ndim 数组轴的个数,在python的世界中,轴的个数被称作秩,

2、’shape 数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性

3、数组元素的总个数,等于shape属性中元组元素的乘积。

a = np.arange(10,20,2)
a

>>>输出:
array([10, 12, 14, 16, 18])

2、dtype zeros

import numpy as np 
a = np.array([2,23,4],dtype=np.int)
a.dtype

>>>输出:
dtype('int32')

3、empty

import numpy as np 
array = np.array([[1,2,3],[2,3,4],[2,3,4],[2,3,4]])
print(array)

array = np.empty((3,4))
print(array)


array([[1, 2, 3],
       [2, 3, 4],
       [2, 3, 4],
       [2, 3, 4]])
       
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

4、reshape()

#arange不包含最后 reshape重新定义长和宽
a = np.arange(12).reshape((3,4)) 
print(a)

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

a = np.linspace(1,10,20).reshape((4,5)) 
#1-10 步长是20  #这里的4x5要和前面的一致,不然会乱码
print(a)

>>>输出
array([[ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684],
       [ 3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789],
       [ 5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895],
       [ 8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ]])


2.numpy基础运算1

2.1加减乘除&sin

import numpy as np
# 减法
a = np.array([10,20,30,40])
b = np.arange(4)
print((a,b))

>>>输出:
(array([10, 20, 30, 40]), array([0, 1, 2, 3]))



c=a-b
print(c)
>>>输出
[10 19 28 37]

c=a+b
print(c)
>>>输出
[10 19 28 37]

c=b**2 #suqare 
print(c)
>>>输出
[10 21 32 43]

c = 10*np.sin(a) #矩阵是弧度,弧度变角度 pai/180 再sin
print (c)
>>>输出
[0 1 4 9]

2.2 大于小于

print(b)
输出:array([0, 1, 2, 3])

b<3
输出:array([ True,  True,  True, False])

2.3点乘* & 矩阵乘dot

2.3.1 点乘

在这里插入图片描述
各元素按位相乘

print(a)
print(b)
>>>输出:
array([[4, 1],
       [7, 1]])
array([[0, 1],
       [2, 3]])

c= a * b
print(c)

array([[ 0,  1],
       [14,  3]])
2.3.2 矩阵乘

要求w的行数要等于x的列数
在这里插入图片描述

print(a)
print(b)
>>>输出:
array([[4, 1],
       [7, 1]])
array([[0, 1],
       [2, 3]])
      
      
print(c_dot)
>>>输出:
array([[ 2,  7],
       [ 2, 10]])

2.4随机数random()

a = np.random.random((2,4)) 
#numpy里面的random包下的random方法
#0到1取随机数,跟matlab里面的random一样,2x4的矩阵
print(a)
>>>输出
[[0.87844318 0.49784507 0.25121893 0.31187728]
 [0.46214256 0.79918406 0.46349321 0.62381245]]

2.5 统计

2.5.1求和sum()
print(np.sum(a))
#求和
>>>输出
4.288016743405327

2.5.2最小值min()
print(np.min(a))
print(np.argmin(a))
#最小值
0.2512189255163222


2.5.3最大值max()
print(np.max(a))
print(np.argmax(a))
#最大值
0.8784431813031204
2.5.4平均值mean /average()
A = np.arange(2,14).reshape((3,4))
print(A)
print(np.mean(A))
print(np.mean(A,axis=0)) #对列求平均值
# np.average(A) 是求平均值的另一种方法

>>>输出:
array([[ 2,  3,  4,  5],
       [ 6,  7,  8,  9],
       [10, 11, 12, 13]])
7.5 #总体平均值  
[6. 7. 8. 9.]#平均值输出
2.5.5 中位数median()
A = np.arange(2,14).reshape((3,4))
print(np.median(A)) # 中位数

>>>输出
>7.5
2.5.6 累加cumsum()
np.cumsum(A) #累加 有点像分布函数,每一次把前面几位的全部加起来

>>>输出:
array([ 2,  5,  9, 14, 20, 27, 35, 44, 54, 65, 77, 90], dtype=int32)

2.5.7 互减diff()

第一行第一列 和 第二行第一列互减 得出第一个数
第二行第一列 和 第三行第一列互减得出第二个数
所以这样得到的数组会比原来的少一列

#A:array([[ 2,  3,  4,  5],
#      [ 6,  7,  8,  9],
#       [10, 11, 12, 13]])
print(np.diff(A))

>>> 输出
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])

2.6 axis=0,axis=1

axis=0对列操作
axis=1对行操作

a = np.random.random((2,4)) 
print(np.sum(a , axis=1)) # axis=1是对行求和
>>>输出
[1.93938446 2.34863228]

print(np.sum(a , axis=0)) # axis=0是对列求和
>>>输出
[1.34058574 1.29702913 0.71471214 0.93568973]

2.7排序sort()

A = np.arange(14,2,-1).reshape((3,4))
print(A)

>>>输出
array([[14, 13, 12, 11],
       [10,  9,  8,  7],
       [ 6,  5,  4,  3]])
       
b=np.sort(A) #默认按行排序
print(b)

>>>输出
array([[11, 12, 13, 14],
       [ 7,  8,  9, 10],
       [ 3,  4,  5,  6]])

2.8矩阵的转置transpose()

# A:array([[14, 13, 12, 11],
#           [10,  9,  8,  7],
#           [6,  5,  4,  3]])

print(np.transpose(A))
>>>输出
array([[14, 10,  6],
       [13,  9,  5],
       [12,  8,  4],
       [11,  7,  3]])

print(A.T)
>>>输出
array([[14, 10,  6],
       [13,  9,  5],
       [12,  8,  4],
       [11,  7,  3]])

print((A.T).dot(A)) #转置后和A矩阵乘
[[332 302 272 242]
 [302 275 248 221]
 [272 248 224 200]
 [242 221 200 179]]

这里强调一下如果定义的是数组,是不能通过转置提升他的维度的,代码如下

import numpy as np
A = np.array([1,1,1])
print(A)
print(A.T)

>>>输出:
array([1, 1, 1])
array([1, 1, 1])

可以看出,一开始定义的是数组,即array( [ ] )
但如果一开始定义的是矩阵呢

import numpy as np
A = np.array([[1,1,1]])
print(A)
print(A.T)

array([[1, 1, 1]])
array([[1],
       [1],
       [1]])

可以看到如果一开始定义的是矩阵,就能够转置,把行向量变成列向量

2.8.1提升维度newaxis
2.8,1.1提升行的维度
print(A)
print(A[np.newaxis,:])
print(A[np.newaxis,:].shape)

>>>输出:
array([1, 1, 1])
[[1 1 1]]
(1, 3)
2.8.1.2提升列的维度
print(A)
print(A[:,np.newaxis])
print(A[:,np.newaxis].shape)

>>>输出:
array([1, 1, 1])
[[1]
 [1]
 [1]]
(3, 1)

2.9限制函数clip()

clip这个函数将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。

可以理解为信号处理时的滤波(截断函数)

print(np.clip(A,5,9)) #有点像滤波

>>>输出:
[[9 9 9 9]
 [9 9 8 7]
 [6 5 5 5]]

3.numpy的索引

import numpy as np
A = np.arange(3,15).reshape((3,4))
print(A)

>>>输出
>[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]

A[2] #默认是行
A[2][1] #第几行第几列

array([11, 12, 13, 14]) #整行输出
12

如果想要检索单独一列的话,就要先转置再检索


3.1循环检索迭代
# A:[[ 3  4  5  6]
# [ 7  8  9 10]
#[11 12 13 14]]

#迭代出行
for row in A:
    print(row)
    
[3 4 5 6]
[7 8 9 10]
[11 12 13 14]

#迭代出列
for column in A.T:
    print(column)
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]


3.2降维
#多维变1维
print(A.flatten())

输出:
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])


for item in A.flat:
    print(item)
    
输出:
3
4
5
6
7
8
9
10
11
12
13
14

4.array的合并

4.1vstack() & hstack()

水平合并 和 垂直合并

import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
print(np.vstack((A,B))) # vertical stack 垂直合并(堆栈)

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

C = np.vstack((A,B))
D = np.hstack((A,B))

print(C)
>>>array([[1, 1, 1],
       [2, 2, 2]])

print(D)
>>>array([1, 1, 1, 2, 2, 2])

print(A.shape, C.shape, D.shape)
(3,) (2, 3) (6,)
4.2多个合并concatenate()
C= np.concatenate((A,B,B,A), axis=0)
print(C)

array([1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1])

5.numpy的copy & deep copy

import numpy as np
a = np.arange(4)
a

>>>输出:
array([0, 1, 2, 3])

b=a
c=a
a[0]=12

print(a)
>>>输出:
array([12,  1,  2,  3])

print(b)
>>>输出:
array([12,  1,  2,  3])

可以看到如果此时改变a的值的话,b的值也会跟着改变,如果此时只是想复制a的值,b不想随着a的改变而改变。

#深拷贝 开辟新地址 复制值,指针指向新地址
#浅拷贝 指针指向新地址
b = a.copy() 
b
a[3]=44

print(b)
>>>输出
array([12,  1,  2,  3])

print(a)
>>>输出
array([12,  1,  2, 44])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值