一、NumPy(数组和矢量计算)

本文介绍了NumPy库的基础知识,包括创建和操作多维数组,如通过array、arange等函数;数组的数据类型转换;数组与标量的运算;索引、切片和转置;通用函数如ufunc,用于元素级计算;数组的条件逻辑处理、数学统计方法;排序功能;以及数组的文件输入输出。此外,还涉及线性代数和随机数生成,是学习NumPy的入门指南。
摘要由CSDN通过智能技术生成


1.1 多维数组对象

1.1.1 创建ndarray

import numpy as np
data = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr = np.array(data)
print(arr)
([[1, 2, 3, 4],
  [5, 6, 7, 8]])
函数参数说明
arrayarray(data)将输入数据(列表、元组、数组或其它序列类型)转换成ndarray
arangearange(n)将输入转换成ndarray(0 ~ n-1)
onesones(shape, dtype)创建一个指定的shape和dtype的全1数组
ones_likeones_like(a, dtype)创建一个以a数组的shape和dtype的全1数组
zeroszeros(shape, dtype)创建一个指定的shape和dtype的全0数组
zeros_likezeros_like(a, dtype)创建一个以a数组的shape和dtype的全0数组
empty创建新数组,只分配内存空间但不填充任何值
empty_like创建新数组,只分配内存空间但不填充任何值
eye、identityeye(n, k, dtype)创建一个n*n的单位矩阵(对角线为1,其余为0,k为对角线起始索引)

1.1.2 ndarray的数据类型

类型有:

  • int8、int16、int32、float16、float32、float64、float128、complex64、complex128、complex256
  • bool、object(Python对象类型)、string_、unicode_

可以通过astype方法显式地转换其dtype

arr = np.array([1, 2, 3, 4, 5])
arr2 = arr.astype(np.float64)
arr2.dtype

1.1.3 数组和标量之间的运算

arr = np.array([1, 2, 3, 4, 5])
arr + 1       # array([2, 3, 4, 5, 6])
arr = np.array([1, 2, 3, 4, 5])
arr * 2      # array([ 2,  4,  6,  8, 10])
arr = np.array([1, 2, 3, 4, 5])
1/arr       # array([1.        , 0.5       , 0.33333333, 0.25      , 0.2       ])

1.1.4 基本的索引和切片

1、索引

arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# ----------------------
arr3d
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
# ----------------------
arr3d[0]
array([[1, 2, 3],
       [4, 5, 6]])
# ----------------------
arr3d[0] = 42
arr3d
array([[[42, 42, 42],
        [42, 42, 42]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

2、切片

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# ----------------------
arr2d
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
# ----------------------
arr2d[0:2]
array([[1, 2, 3],
       [4, 5, 6]])
# ----------------------
arr2d[:2, 1:]
array([[2, 3],
       [5, 6]])

1.1.5 数组的转置和轴对换

arr = np.arange(16).reshape((4,4))
# ----------------------
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
# ----------------------
arr.T
array([[ 0,  4,  8, 12],
       [ 1,  5,  9, 13],
       [ 2,  6, 10, 14],
       [ 3,  7, 11, 15]])
# ----------------------
np.dot(arr.T, arr) # 计算arr的转置与arr的内积
array([[224, 248, 272, 296],
       [248, 276, 304, 332],
       [272, 304, 336, 368],
       [296, 332, 368, 404]])

1.2 通用函数:快速的元素级数组函数

1.2.1 一元函数ufunc

函数说明
abs、fabs计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs。
sqrt计算各元素的平方根
square计算各元素的平方
exp计算各元素的指数   e x \ e^{x}  ex
log、log10、log2、log1p分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x)
sign计算各元素的正负号:1(正数)、0(零)、-1(负数)
cell计算各元素的celling值,即大于等于该值的最小整数
floor计算各元素的floor值,即小于等于该值的最大整数
rint将各元素值四舍五入到最接近的整数,保留dtype
modf将数组的小数整数部分以两个独立数组的形式返回
isnan返回一个表示“哪些值是NaN”的布尔型数组
isfinite、isinf分别返回一个表示”哪些元素是有穷的(非inf。非NaN)”或“哪些元素是无穷的”的布尔型数组
cos、cosh、sin、sinh、tan、tanh普通型和双曲型三角函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh反三角函数
logical_not计算各元素not x的真值。相当于-arr

1.2.2 二元函数ufunc

函数说明
add将数组中对应的元素相加
subtract从第一个数组中减去第二个数组中的元素
multiply数组元素相乘
divide、floor_divide除法或向下圆整除法(丢弃余数)
power第一个数组中的元素为A,第二个数组中对应的元素为B,计算   A B \ A^B  AB
maximum、fmax元素级的最大值计算(同列最大值),fmax将忽略NaN
minimum、fmin元素级的最小值计算(同列最小值),fmin将忽略NaN
copysign将第二个数组中的值的符号复制给第一个数组中的值
greater、greater_equal、less、less_equal、equal、not_equal执行元素的比较运算,最终产生布尔型数组。相当于运算符>、>=、<、<=、==、!=
logical_and、logical_or、logical_xor执行元素级的真值逻辑运算。相当于和、或、异或

1.3 利用数组进行数据处理

1.3.1 将条件逻辑表述为数组运算

numpy.where函数是三元表达式x if conditon else y的矢量化版本。

import numpy as np
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
np.where(cond, xarr, yarr)
# -----------------------------------------------
array([1.1, 2.2, 1.3, 1.4, 2.5])

zarr = np.array([-1, 1, -2, 2, 3])
np.where(zarr > 0, 2, -2)
# --------------------------------
array([-2,  2, -2,  2,  2])

1.3.2 数学和统计方法

基本数组统计方法

方法说明
sum对数组中全部或某轴向的元素求和。零长度的数组的sum为0
mean算术平均数。零长度的数组的mean为NaN
std、var分别为标准差方差,自由度可调(默认为n)
min、max最大值最小值
argmin、argmax分别为最大最小值的索引
cumsum所有元素的累计和
cumprod所有元素的累计积

1.3.3 用于布尔型数组的方法

1、sum经常被用来对布尔型数组中的True值计数

arr = np.random.randn(100)
(arr > 0).sum()       # 正数的数量
# ------------------------------
54

2、any用于测试数组中是否存在一个或多个True

bools = np.array([False, False, True, False])
bools.any()
# ----------------------------------------
True

3、all检查数组中所有的值是否都是True

bools.all()
# ----------------
False

1.3.4 排序

1、一维数组排序

arr = np.random.randn(8)
arr
# --------------------------
array([-1.34090737, -1.11147088,  1.14095049, -1.33143649, -1.31622927,
        0.63895622,  0.14932652, -0.50808672])

arr.sort()
arr
# ---------------------------
array([-1.34090737, -1.33143649, -1.31622927, -1.11147088, -0.50808672,
        0.14932652,  0.63895622,  1.14095049])

2、多维数组排序

arr = np.random.randn(5,3)
arr
# ---------------------------------
array([[ 0.36169348,  1.0702042 , -1.48938408],
       [-0.59650124, -0.6072529 ,  0.20503847],
       [-0.0850005 ,  1.40057176,  0.08668278],
       [ 1.99371954, -0.80790195, -0.75650762],
       [-2.14722736, -2.3670578 ,  1.91681634]])


np.sort(arr)    # 默认行排列
# ----------------------------------
array([[-1.48938408,  0.36169348,  1.0702042 ],
       [-0.6072529 , -0.59650124,  0.20503847],
       [-0.0850005 ,  0.08668278,  1.40057176],
       [-0.80790195, -0.75650762,  1.99371954],
       [-2.3670578 , -2.14722736,  1.91681634]])

np.sort(arr,1)    # 行排列
# ---------------------------------
array([[-1.48938408,  0.36169348,  1.0702042 ],
       [-0.6072529 , -0.59650124,  0.20503847],
       [-0.0850005 ,  0.08668278,  1.40057176],
       [-0.80790195, -0.75650762,  1.99371954],
       [-2.3670578 , -2.14722736,  1.91681634]])
       
np.sort(arr,0)    # 列排列
# --------------------------------
array([[-2.14722736, -2.3670578 , -1.48938408],
       [-0.59650124, -0.80790195, -0.75650762],
       [-0.0850005 , -0.6072529 ,  0.08668278],
       [ 0.36169348,  1.0702042 ,  0.20503847],
       [ 1.99371954,  1.40057176,  1.91681634]])


1.3.5 唯一化以及其它元素的集合逻辑

函数np.unique用于找出数组中的唯一值并返回已排序的结果。

ints = np.array([3, 3, 3, 2, 2, 0,0, 1])
np.unique(ints)
# ----------------------------------------
array([0, 1, 2, 3])

函数np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组。

values = np.array([6, 0, 0, 3, 2, 5, 6])
np.in1d(values, [2, 3, 6])
# ---------------------------------------
array([ True, False, False,  True,  True, False,  True])

数组的集合运算

方法说明
unique(x)计算x中的唯一元素,并返回一个有序结果
intersect1d(x,y)计算x和y中的公共元素,并返回有序结果
union1d(x,y)计算x和y的并集,并返回有序结果
in1d(x,y)得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x,y)集合的,即元素在x中且不在y中
setxor1d(x,y)集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素

1.4 用于数组的文件输入输出

1.5 线性代数

1.6 随机数生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值