随笔记录——numpy2

12、 数组转置
arr = np.arange(12).reshape((4, 3))
arr
Out[114]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
arr.T
Out[115]: 
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])
12.1、矩阵內积
np.dot(arr, arr.T)
Out[116]: 
array([[  5,  14,  23,  32],
       [ 14,  50,  86, 122],
       [ 23,  86, 149, 212],
       [ 32, 122, 212, 302]])
12.2、transpose : 高维度的轴转置,直接指定轴
arr = np.arange(24).reshape((2, 3, 4))
arr.shape
Out[118]: (2, 3, 4)
arr.transpose((0,2,1)).shape# 轴已经被重新排序,第二个轴变为第三个,第三个轴变为第二个, 第一个轴没有变化。
Out[120]: (2, 4, 3)
13. 一元通用函数

对数据内的元素逐一进行计算转换的函数,例如:sqrt, exp, square函数等

arr = np.arange(8)

np.sqrt(arr)# 求平方
Out[122]: 
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131])

np.exp(arr)# e的 x次幂
Out[123]: 
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03])

np.square(arr)# 求平方
Out[124]: array([ 0,  1,  4,  9, 16, 25, 36, 49])

注意,如果存在入参不符合运算符号,则会返回nan

arr = np.random.randn(8)

arr
Out[133]: 
array([-2.05037713,  0.14020296, -0.23755503, -0.30179514,  0.71098618,
        0.97552671, -0.53583424,  0.83127439])
        
np.sqrt(arr)
Out[134]: 
array([       nan, 0.37443686,        nan,        nan, 0.84319996,
       0.98768756,        nan, 0.9117425 ])
14、二元通用函数

比如add或maximum则会接收两个数组并返回一个数组作为结果,因此称为二元通用函数:

x = np.random.randn(6)
y = np.random.randn(6)
x
Out[128]: 
array([-0.21500853,  0.66749928, -0.20697387, -0.71304554,  0.37098523,
        0.1700025 ])
y
Out[129]: 
array([-0.56982788,  0.68271937,  0.34257971, -0.72677899,  2.02009784,
       -0.29568308])
np.minimum(x, y)
Out[130]: 
array([-0.56982788,  0.66749928, -0.20697387, -0.72677899,  0.37098523,
       -0.29568308])
np.add(x, y)
Out[131]: 
array([-0.7848364 ,  1.35021865,  0.13560584, -1.43982453,  2.39108307,
       -0.12568058])

一些常用的二元通用函数:add(), subtract(), multiply(), divide(), power(), minimum(), maximum(), mod(), copysign() 等

15、面向数组编程

使用NumPy数组可以使你**利用简单的数组表达式完成多种数据操作任务,而无须写些大量循环。这种利用数组表达式来替代显式循环的方法,称为向量化。**通常,向量化的数组操作会比纯Python的等价实现在速度上快一到两个数量级(甚至更多),这对所有种类的数值计算产生了最大的影响。广播机制,就是向量化计算的有效方式。

15.1、where使用
xarr = np.array([1, 2, 3, 4, 5])

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

cond = np.array([True, False, True, False, False])

np.where(cond, xarr, yarr)
Out[174]: array([ 1, -2,  3, -4, -5])

where 的第二和第三个参数也可以是常数:

arr = np.random.randn(4, 4)

arr
Out[176]: 
array([[ 1.2961233 , -2.88646621,  0.93438555, -1.25265235],
       [ 0.48880916,  0.42995708, -0.64266328,  0.78978925],
       [ 0.45636547, -0.73146585,  1.4273524 , -0.35658024],
       [-0.33206549, -0.43699776, -1.3090687 , -0.22809868]])

np.where(arr > 0, 2, 4)
Out[178]: 
array([[2, 4, 2, 4],
       [2, 2, 4, 2],
       [2, 4, 2, 4],
       [4, 4, 4, 4]])

也可以将标量和数组联合:

np.where(arr > 0, 2, arr)
Out[179]: 
array([[ 2.        , -2.88646621,  2.        , -1.25265235],
       [ 2.        ,  2.        , -0.64266328,  2.        ],
       [ 2.        , -0.73146585,  2.        , -0.35658024],
       [-0.33206549, -0.43699776, -1.3090687 , -0.22809868]])
16、数学统计方法
16.1、 生成正态分布随机数
np.random.randn(4, 4)
Out[181]: 
array([[-0.43557002,  0.18513869,  1.38542625,  1.08208742],
       [-0.95626917, -0.47786185,  1.13753443, -0.50758502],
       [-0.57587564,  0.09479777, -1.21633601,  1.15994104],
       [-1.18379534, -1.80556846, -0.86174233, -0.62384213]])
16.2、求均值,求和等基本函数
arr = np.random.randn(6, 4)

np.mean(arr)
Out[187]: 0.2709723012613589

np.mean(arr, axis=0)
Out[188]: array([ 0.89950363,  0.21092785,  0.02243588, -0.04897816])

np.mean(arr, axis=1)
Out[189]: 
array([-0.03887685,  0.49932633,  0.19285844,  0.67418347,  0.20515993,
        0.09318249])

np.sum(arr, axis=1)
Out[190]: 
array([-0.1555074 ,  1.99730531,  0.77143377,  2.69673388,  0.82063972,
        0.37272995])
16.3、从0开始累积和,保留中间结果
arr = np.array([[1, 2, 3], [2, 3, 4]])

arr.cumsum()
Out[192]: array([ 1,  3,  6,  8, 11, 15])

arr.cumsum(axis=0)
Out[193]: 
array([[1, 2, 3],
       [3, 5, 7]])
16.4、从1开始累积积,保留中间结果
arr = np.array([[1, 2, 3], [2, 3, 4]])
arr.cumprod()
Out[194]: array([  1,   2,   6,  12,  36, 144])

arr.cumprod(axis=1)
Out[195]: 
array([[ 1,  2,  6],
       [ 2,  6, 24]])
17、布尔值使用注意

布尔值会被强制为1(True)和0(False)。因此,sum通常可以用于计算布尔值数组中的True的个数:

arr = np.random.randn(20)

(arr > 0).sum()
Out[197]: 10

arr
Out[198]: 
array([-0.06362464, -0.6100316 ,  0.12361219,  0.25190379, -1.52586242,
       -1.33745935, -0.22683688, -0.03459611,  0.6139537 , -1.64770753,
        1.66887116,  0.26116986,  0.20411899,  0.83109152,  1.67663276,
       -0.71277905, -0.20720236,  0.23696832, -0.44984138,  0.20837779])
18、对数组进行排序
arr = np.random.randn(6)

arr.sort()# 会改变数组本身的元素顺序

arr
Out[204]: 
array([-1.00733061, -1.00571107, -0.19190603,  0.25129317,  1.24748051,
        1.44873112])

np.sort(arr)# 本身顺序不变
Out[205]: 
array([-1.00733061, -1.00571107, -0.19190603,  0.25129317,  1.24748051,
        1.44873112])

按照某个轴排序

arr = np.random.randn(3, 4)
arr
Out[219]: 
array([[ 0.99479473,  0.10430381,  0.02247815, -2.68770651],
       [-0.85507877, -0.88179426,  0.79425161,  0.99193008],
       [-1.58212775, -1.0224034 , -0.04208243, -0.43739719]])

np.sort(arr, axis=1)
Out[220]: 
array([[-2.68770651,  0.02247815,  0.10430381,  0.99479473],
       [-0.88179426, -0.85507877,  0.79425161,  0.99193008],
       [-1.58212775, -1.0224034 , -0.43739719, -0.04208243]])
19、元素去重
ints = np.random.randint(low=0, high=8, size=10)

np.unique(ints)
Out[230]: array([2, 4, 5, 6, 7])
ints
Out[231]: array([2, 7, 5, 4, 2, 5, 2, 7, 5, 6])
20、 检查一个数组中的值是否在另外一个数组中
ints = np.random.randint(low=0, high=8, size=10)

ints
Out[233]: array([0, 1, 5, 5, 7, 6, 7, 4, 1, 5])
np.in1d([1, 8, 9], ints)
Out[235]: array([ True, False, False])

另外ndarray还存在如下的集合操作:
在这里插入图片描述
待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值