2021-02-27 numpy

import numpy as np
np.random.seed(0) # 设置随机数种子
np_array = np.random.randint(10, size=(3, 4, 5), dtype='int') # 三维数组

np_array .ndim
np_array .shape
np_array .size

np_array [start:stop:step]
np_array .copy
import copy
copy.deepcopy(np_array)

np.arange(1, 10).reshape((3, 3))
np_array [np.newaxis, :]  # 获得行向量或列向量

x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
np.concatenate([x, y])
np.concatenate([x, y], axis=1)
# 垂直栈数组
np.vstack([x, y])
# 水平栈数组
np.hstack([x, y])

与之类似, np.dstack 将沿着第三个维度拼接数组
分裂可以通过 np.split、 np.hsplit 和 np.vsplit 函数来实现

x = [1, 2, 3, 99, 99, 3, 2, 1]
x1, x2, x3 = np.split(x, [3, 5])
print(x1, x2, x3)

grid = np.arange(16).reshape((4, 4))
upper, lower = np.vsplit(grid, [2])

numpy数组计算

x // 2  # 整除
x % 2 # 取余

// np.floor_divide 地板除法运算(floor division,即 3 // 2 = 1)
** np.power 指数运算(即 2 ** 3 = 8)
% np.mod 模 / 余数(即 9 % 4 = 1)

x = [1, 2, 3]
print("x =", x)
print("e^x =", np.exp(x))
print("2^x =", np.exp2(x))
print("3^x =", np.power(3, x))

x = [1, 2, 4, 10]
print("x =", x)
print("ln(x) =", np.log(x))
print("log2(x) =", np.log2(x))
print("log10(x) =", np.log10(x))
y = np.zeros(10)
np.power(2, x, out=y[::2])
print(y)

如果这里写的是 y[::2] = 2 ** x,那么结果将是创建一个临时数组,该数组存放的是2 ** x 的结果,并且接下来会将这些值复制到 y 数组中。对于上述例子中比较小的计算量来说,这两种方式的差别并不大。但是对于较大的数组,通过慎重使用 out 参数将能够有效节约内存。

np.sum、 np.prod、 np.cumsum、np.cumprod 
x = np.arange(1, 6)
np.add.reduce(x) # 重复计算,不保留中间结果
np.add.accumulate(x) #重复计算,并保留中间结果
np.multiply.outer(x, x) # 外积

M.min(axis=0)
M.max(axis=1)
image.png

image.png
如果需要统计布尔数组中 True 记录的个数,可以使用 np.count_nonzero 函数
# 有没有值大于8?
np.any(x > 8)
# 是否所有值都小于10?
np.all(x < 10)

Python 的逐位逻辑
运算符(bitwise logic operator) &、 |、 ^ 和 ~ 来实现。

image.png

and 和 or 判断整个对象是真或假,而 & 和 | 是指每个对象中的比特位。

x = np.zeros(10)
i = [2, 3, 3, 4, 4, 4]
x[i] += 1

x = np.zeros(10)
np.add.at(x, i, 1)

NumPy中的快速排序: np.sort和np.argsort

对X的每一列排序

np.sort(X, axis=0)

x = np.array([7, 2, 3, 1, 6, 5, 4])
np.partition(x, 3)

np.partition(X, 2, axis=1)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大师兄的Python机器学习笔记:统计学基础之底层代码实现(二)大师兄的Python机器学习笔记:Numpy库、S...
    superkmi阅读 4,442评论 0 7
  • 0. 前言 大约七八年前,我曾经用 pyOpenGL 画过地球磁层顶的三维模型,这段代码至今仍然还运行在某科研机构...
    鹤子青云上阅读 3,613评论 0 0
  • NumPy(Numerical Python 的简称)提供了高效存储和操作密集数据缓存的接口,可以理解是一个数组,...
    奉先阅读 4,053评论 0 0
  • NumPy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python...
    Recalcitrant阅读 3,887评论 0 1
  • To be continue NumPy(Numerical Python) 是 Python 语言的一个扩展程序...
    z761943阅读 5,547评论 1 7