莫烦 Python Numpy

我的视频学习笔记
Numpy的属性

import numpy as np

array = np.array([[1, 2, 3],
         [2, 3, 4]])
print(array)
print('Number of dim : ', array.ndim)  # 2维数组
print('Shape of array : ', array.shape)  # shape是2×3的
print('Size of array : ', array.size)  # 一共有6个元素

创建array

a = np.array([2, 23, 4], dtype=np.float)  # 以列表的格式创建 输出是没有逗号的
# dtype=np.float 输出 float64 后面跟的数字越小占用的内存越小,但是精度也越低 一帮用 np.float & np.int
a = np.array([[2, 23, 4],
             [2, 32, 4]])  # [[ 2 23  4] [ 2 32  4]]
# 定义全部为0的矩阵
a = np.zeros((3, 4))  # [[0. 0. 0. 0.] [0. 0. 0. 0.]  [0. 0. 0. 0.]]
# 定义全部为1的整型矩阵
a = np.ones((3, 4), dtype=np.int)  # [[1 1 1 1] [1 1 1 1] [1 1 1 1]]
# 定义empty的矩阵
a = np.empty((3, 4))  # [[0. 0. 0. 0.] [0. 0. 0. 0.]  [0. 0. 0. 0.]]
# 定义有序数列
a = np.arange(10, 20, 2)  # [10 12 14 16 18] start:10 end:20 step:2
a = np.arange(12).reshape((3, 4))  # [[ 0  1  2  3]  [ 4  5  6  7]  [ 8  9 10 11]]
# 生成一个线段
a = np.linspace(1, 10, 5)  # 从1到10分成4段5个点的线段 [ 1.    3.25  5.5   7.75 10.  ]
a = np.linspace(1, 10, 6).reshape((2, 3))  # [[ 1.   2.8  4.6] [ 6.4  8.2 10. ]]

基础运算1

a = np.array([10, 20, 30, 40])
b = np.arange(4)
c = a - b  # 逐个相减 [10 19 28 37] 相加,相乘等 等同
c = 10 * np.sin(a)  # 三角函数运算 [-5.44021111  9.12945251 -9.88031624  7.4511316 ]
print(b < 3)  # b的形式:[0 1 2 3] 输出 b < 3 的结果[ True  True  True False]

a = np.array([[1, 1],
              [0, 1]])
b = np.arange(4).reshape((2, 2))
c = a * b  # 逐个相乘  [[0 1] [0 3]]
c_dot = np.dot(a, b)  # 矩阵相乘  [[2 4] [2 3]]
c_dot_2 = a.dot(b)  # 与c_dot等同

# 随机生成一个array 随机产生一个0~1的n行*m列的array
a = np.random.random((2, 4))
print(a)
c = np.sum(a)  # array 元素求和
c = np.min(a)  # array 元素最小值
c = np.max(a)  # array 元素最大值
c = np.sum(a, axis=0)  # axis=0 是每一列求和 axis=1是每一行求和
c = np.min(a, axis=1)  # axis=0 是每一列求最小值 axis=1是每一行求最小值
c = np.max(a, axis=1)  # axis=0 是每一列求最大值 axis=1是每一行求最大值
print(c)

输出:

[ True  True  True False]
[[0.73580635 0.10301389 0.74798967 0.72380255]
 [0.09029418 0.60661582 0.72279016 0.0947304 ]]
[0.74798967 0.72279016]

基础运算2

A = np.arange(2, 14).reshape((3, 4))  # [[ 2  3  4  5]  [ 6  7  8  9] [10 11 12 13]]
c = np.argmin(A)  # 最小值的索引 0
c = np.argmax(A)  # 最大值的索引 11
c = np.mean(A)  # 计算A的平均值
c = np.mean(A, axis=1)  # axis=0 是每一列求平均值 axis=1是每一行求平均值
c = A.mean()  # 和前一个的算法等同 也是计算A的平均值
c = np.average(A)  # 和前一个的算法等同 也是计算A的平均值
c = np.median(A)  # 找到A的中位数
c = np.cumsum(A)  # 逐步累加 [ 2  5  9 14 20 27 35 44 54 65 77 90]
c = np.diff(A)  # array里每两个数的差 [[1 1 1]  [1 1 1] [1 1 1]] 3行3列
c = np.nonzero(A)  # 输出非0的行列 前面为行 后面为列 (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
# array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
A = np.arange(14, 2, -1).reshape((3, 4))  # [[14 13 12 11] [10  9  8  7] [ 6  5  4  3]]
c = np.sort(A)  # 逐行从小到大排序 [[11 12 13 14][ 7  8  9 10] [ 3  4  5  6]]
c = np.transpose(A)  # A的转置
# [[14 10  6]
#  [13  9  5]
#  [12  8  4]
#  [11  7  3]]
c = A.T   # 同上一个算法 [[14 10  6] [13  9  5] [12  8  4] [11  7  3]]
c = np.transpose(A).dot(A)  # A的转置与A做矩阵乘法
c = np.clip(A, 5, 9)  # 将A中所有小于5的数都改乘5 大于9的数改成9 5和9之间的数保留
# [[9 9 9 9]
#  [9 9 8 7]
#  [6 5 5 5]]

numpy的索引

A = np.arange(3, 15).reshape((3, 4))
print(A)
print(A[2])  # 索引处第2行所有元素
print(A[2, :])  # 索引处第2行所有元素
print(A[1][1])  # 索引处第1行第1个元素
print(A[1, 1])  # 索引处第1行第1个元素
print(A[:, 1])  # 索引处第1列所有元素
print(A[1, 1: 3])  # 索引处第1行第1个和第2个元素

for row in A:  # 用for循环 循环A的话 默认是按行来的
    print(row)

for column in A.T:  # 迭代列 将A转置 即可实现迭代列
    print(column)

print(A.flatten())  # 将3行4列的矩阵A转变成一个1行的序列
for item in A.flat:  # 输出每一个序列的项目
    print(item)

输出:

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

array的合并

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

C = np.vstack((A, B))  # vstack--vertical stack 上下合并 [[1 1 1] [2 2 2]]
D = np.hstack((A, B))  # hstack--horizontal  左右合并成一个六个元素的序列 [1 1 1 2 2 2]
print(A.shape, C.shape, D.shape)  # A的shape是(3,)tuple类型只有三个元素 C的shape是(2, 3)即2行3列 D的shape是(6,)
E = A.T  # 序列是不能被转置的 所以仍为 [1 1 1]
E = A[np.newaxis, :]  # 在行上加了一个维度 [[1 1 1]]
E = A[:, np.newaxis]  # 在列上加了一个维度 [[1] [1] [1]]
A = A[:, np.newaxis]
B = B[:, np.newaxis]
E = np.concatenate((A, B, A, B), axis=1)  # 可以决定多个array纵向或横向的合并 axis=1 左右合并 axis=0 上下合并
print(E)

输出:

(3,) (2, 3) (6,)
[[1 2 1 2]
 [1 2 1 2]
 [1 2 1 2]]

array的分割

A = np.arange(12).reshape((3, 4))
C = np.split(A, 2, axis=1)  # 将A列向分割成两块
# [array([[0, 1],
#         [4, 5],
#         [8, 9]]),
# array([[ 2,  3],
#        [ 6,  7],
#        [10, 11]])]
C = np.split(A, 3, axis=0)  # 将A横向分成三块
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
C = np.array_split(A, 3, axis=1)  # 不等分割 2:1:1
# [array([[0, 1],
#         [4, 5],
#         [8, 9]]),
#  array([[ 2],
#         [ 6],
#         [10]]),
#  array([[ 3],
#         [ 7],
#         [11]])]
C = np.vsplit(A, 3)  # 按行分成3块
C = np.hsplit(A, 2)  # 按列分成2块
a = np.arange(4)  # [0 1 2 3]
b = a  # [0 1 2 3]
c = a  # [0 1 2 3]
d = b  # [0 1 2 3]
a[0] = 11
d[1: 3] = [22, 33]
print(a, b, c, d)  # [11 22 33  3] [11 22 33  3] [11 22 33  3] [11 22 33  3]
e = a.copy()  # 只想赋值 不想关联 a的变化与e无关  [11 22 33  3]  指向不同的地址
a[0] = 22
e[0] = 100
print(a)
print(e)

输出:

[11 22 33  3] [11 22 33  3] [11 22 33  3] [11 22 33  3]
[22 22 33  3]
[100  22  33   3]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值