【莫烦Python】Numpy教程

本文介绍了Numpy库的基本属性,如数组的维度、形状和大小,以及如何创建数组,包括np.array、np.zeros、np.ones、np.empty和np.arange。接着讲解了数组的基本运算,如加减乘除、正弦、比较和矩阵乘法。此外,还涵盖了数组的索引、合并与分割,以及copy和deepcopy的区别。这些内容是数据处理和科学计算的基础。

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

前言

莫烦老师Numpy教程,将所有代码和对应的输出记录在博客中,方便自己后续查看

作者:莫烦Python

转自:https://mofanpy.com/tutorials/data-manipulation/numpy/

视频:【莫烦Python】Numpy & Pandas(数据处理教程)

代码:https://github.com/MorvanZhou/tutorials/tree/master/numpy%26pandas

环境:python-3.9.13 numpy-1.21.5

1.numpy属性

  • 维度:array.dims
  • 形状:array.shape
  • 大小:array.size
import numpy as np

array = np.array([[1, 2, 3],
                  [2, 3, 4],
                  [3, 4, 5]])

print("number of dim:", array.ndim)
print("shape:", array.shape)
print("size:", array.size)

运行结果如下:

number of dim: 2
shape: (3, 3)
size: 9

2.numpy的array创建

  • 方法一:np.array
    • dtype指定类型
  • 方法二:np.zeros/np.ones/np.empty
    • shape可通过元组/列表指定
  • 方法三:np.arange
    • (起始值,终止值,步长)
    • (值).reshape(rows,cols)
  • 方法四:np.linspace
    • (起始值,终止值,总元素).reshape(rows,cols)
import numpy as np

# 方法1:np.array
array1 = np.array([2, 3, 4])
array2 = np.array([[1, 2, 3],
                   [4, 5, 6]], dtype=np.float32)
print("array1:\n", array1)
print("array2:\n", array2)

# 方法2:np.zeros/np.ones/np.empty
array3 = np.zeros((3, 4))
array4 = np.ones((3, 4))
array5 = np.empty((3, 4))
print("array3:\n", array3)
print("array4:\n", array4)
print("array5:\n", array5)

# 方法3:np.arange
array6 = np.arange(10, 20, 2)
array7 = np.arange(12).reshape(3, 4)
print("array6:\n", array6)
print("array7:\n", array7)

# 方法4:np.linspace
array8 = np.linspace(1, 10, 5)
array9 = np.linspace(5, 10, 6).reshape(2, 3)
print("array8:\n", array8)
print("array9:\n", array9)

运行结果如下:

array1:
 [2 3 4]
array2:
 [[1. 2. 3.]
 [4. 5. 6.]]
array3:
 [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
array4:
 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
array5:
 [[6.23042070e-307 1.89146896e-307 1.37961302e-306 6.23053614e-307]
 [6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307] 
 [1.86921143e-306 6.23061763e-307 8.45590539e-307 8.34445562e-308]]
array6:
 [10 12 14 16 18]
array7:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
array8:
 [ 1.    3.25  5.5   7.75 10.  ]
array9:
 [[ 5.  6.  7.]
 [ 8.  9. 10.]]

3.numpy的基础运算

  • + / - / ** / sin / < > ==
  • * / np.dot a.dot /
    • *代表按元素xiangc
    • np.dot代表矩阵相乘
  • sum / min / max
    • axis=0,以行为基准,求取的是每一列
    • axis=1,以列为基准,求取的是每一行
import numpy as np

# + / - / ** / sin / < > == 
print("==========/ + / - / ** / sin / < > == /==========")
a = np.array([1, 2, 3, 4])
b = np.arange(4)
c_1 = a + b
c_2 = a - b
c_3 = b ** 2
c_4 = np.sin(a)
c_5 = b < 2
print("a", a)
print("b", b)
print("a+b:", c_1)
print("a-b:", c_2)
print("b^2:", c_3)
print("sin(a):", c_4)
print("b<2:", c_5)

# * / np.dot a.dot / 
print("==========/ * / np.dot a.dot /==========")
a = np.array([[1, 2],
              [2, 3]])
b = np.arange(4).reshape(2, 2)
c_1 = a * b     # 对应元素相乘
c_2 = np.dot(a, b)  # 矩阵相乘
print("a:\n", a)
print("b:\n", b)
print("a*b:\n", c_1)
print("a@b:\n", c_2)


# sum / min / max
print("==========/ sum / min / max /==========")
a = np.random.random((2, 4))
print("a\n", a)
print("sum", np.sum(a))
print("min", np.min(a, axis=1)) # 每行求min
print("max", np.max(a, axis=0)) # 每列求max

运行结果如下:

==========/ + / - / ** / sin / < > == /==========
a [1 2 3 4]
b [0 1 2 3]
a+b: [1 3 5 7]
a-b: [1 1 1 1]
b^2: [0 1 4 9]
sin(a): [ 0.84147098  0.90929743  0.14112001 -0.7568025 ]
b<2: [ True  True False False]
==========/ * / np.dot a.dot /==========
a:
 [[1 2]
 [2 3]]
b:
 [[0 1]
 [2 3]]
a*b:
 [[0 2]
 [4 9]]
a@b:
 [[ 4  7]
 [ 6 11]]
==========/ sum / min / max /==========
a
 [[0.83919862 0.38688114 0.06607408 0.42812918]
 [0.79844368 0.58625999 0.72225084 0.38427147]]
sum 4.211508995766072
min [0.06607408 0.38427147]
max [0.83919862 0.58625999 0.72225084 0.42812918]

4.numpy的基础运算2

  • np.argmin / np.argmax / np.mean / np.average / np.median
    • np.argmin(a, axis=None, out=None) 默认将输入数组展平,返回索引
  • np.cumsum / np.diff / np.nonzero / np.sort / np.transpose / np.clip
    • np.clip(A, min=, max=) A中小于min的截取为min,大于max的截取为max
import numpy as np

# np.argmin np.argmax np.mean(axis) np.average np.median 
array = np.arange(2, 8).reshape(2, 3)
print("array:\n", array)
print("argmin:", np.argmin(array))
print("argmax:", np.argmax(array))
print("mean:", np.mean(array))
print("mean(axis=0):", np.mean(array, axis=0))
print("average:", np.average(array))
print("median:", np.median(array))

# np.cumsum np.diff np.nonzero np.sort np.transpose/A.T np.clip
print("cumsum:", np.cumsum(array))
print("diff:\n", np.diff(array))
print("nonzero", np.nonzero(array))
print("sort:\n", np.sort(array))
print("transpose:\n", np.transpose(array))
print("clip:\n", np.clip(array, 4, 6))

运行结果如下:

array:
 [[2 3 4]
 [5 6 7]]
argmin: 0
argmax: 5
mean: 4.5
mean(axis=0): [3.5 4.5 5.5]
average: 4.5
median: 4.5
cumsum: [ 2  5  9 14 20 27]
diff:
 [[1 1]
 [1 1]]
nonzero (array([0, 0, 0, 1, 1, 1], dtype=int64), array([0, 1, 2, 0, 1, 2], dtype=int64))
sort:
 [[2 3 4]
 [5 6 7]]
transpose:
 [[2 5]
 [3 6]
 [4 7]]
clip:
 [[4 4 4]
 [5 6 6]]

5.numpy的索引

  • A[2] A[1][1] A[1,1]
  • A[2,:] A[:,1] A[1,1:3]
  • row col item
import numpy as np

# A[2] A[1][1] A[1,1]
A = np.arange(2, 14).reshape(3, 4)
print("A:\n", A)
print("A[2]:", A[2])
print("A[1][1]:", A[1][1])
print("A[1,1]:", A[1,1])


# A[2,:] A[:,1] A[1, 1:3]
print("A[2,:]:", A[2,:])
print("A[:,1]:", A[:,1])
print("A[1,1:3]:", A[1,1:3])

# row col item
for i, row in enumerate(A):
    print(f"row_{i}:", row)

for i, col in enumerate(A.T):
    print(f"col_{i}:", col)

for item in A.flat:
    print(item)

运行结果如下:

A:
 [[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
A[2]: [10 11 12 13]
A[1][1]: 7
A[1,1]: 7
A[2,:]: [10 11 12 13]
A[:,1]: [ 3  7 11]
A[1,1:3]: [7 8]
row_0: [2 3 4 5]
row_1: [6 7 8 9]
row_2: [10 11 12 13]
col_0: [ 2  6 10]
col_1: [ 3  7 11]
col_2: [ 4  8 12]
col_3: [ 5  9 13]
2
3
4
5
6
7
8
9
10
11
12
13

6.numpy的array合并

  • np.vstack(上下) np.hstack(左右)
  • A[np.newasix,:] 在行上添加一个维度 A[:,np.newasix] 在列上添加一个维度
  • np.concatenate((A,B),axis=0)
import numpy as np

# np.vstack(上下) np.hstack(左右)
A = np.array([1,1,1])
B = np.array([2,2,2])
print("A:", A)
print("B:", B)
print("vstack:\n", np.vstack((A, B)))
print("hstack:", np.hstack((A, B)))

# A[np.newasix,:] 在行上添加一个维度
# A[:,np.newasix] 在列上添加一个维度
C = A[np.newaxis, :]
D = A[:, np.newaxis]
print("C:", C)
print("D:\n", D)

# np.concatenate((A,B),axis=0)
A = np.arange(1, 7).reshape(2, 3)
B = np.arange(7, 13).reshape(2, 3)
E = np.concatenate((A, B),axis=0)
print("E:\n", E)

运行结果如下:

A: [1 1 1]
B: [2 2 2]
vstack:
 [[1 1 1]
 [2 2 2]]
hstack: [1 1 1 2 2 2]
C: [[1 1 1]]
D:
 [[1]
 [1]
 [1]]
E:
 [[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

7.numpy的array分割

  • np.split np.array_split
  • np.vsplit np.hsplit
A:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
split:
 [array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
array_split:
 [array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
vsplit:
 [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
hsplit:
 [array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]

8.numpy的copy & deep copy

  • copy
  • deep copy
import numpy as np

# copy
a = np.arange(4)
b = a
c = b
print("a:", a)
a[0] = 1
print("a:", a)
print("b:", b)
print("c:", c)
print(b is a)
print(c is a)

# deep copy
a = np.arange(4)
d = a.copy()
a[0] = 1
print("a:", a)
print("d:", d)
print(d is a)

运行结果如下:

a: [0 1 2 3]
a: [1 1 2 3]
b: [1 1 2 3]
c: [1 1 2 3]
True
True
a: [1 1 2 3]
d: [0 1 2 3]
False

结语

代码仅供自己参考,大家可以查看对应的教程视频自行学习

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值