Python numpy资料整理记录_arr**0.5怎么算_荼蘼不谢的博客-程序员宅基地

技术标签: python  神经网络  numpy  

1  numpy基础:数组和矢量计算

随着机器学习等相关学科的兴起,python的使用量和关注程度日益上升,而numpy作为机器学习中必不可少的一个库,特地整理并记录如下。中间省略了一些我认为十分基础的部分,同时也增加了一些我认为十分有意思值得关注或者有益于理解numpy逻辑的部分。

numpy基础:数组和矢量计算

import numpy as np

data = np.array([[0.95, -0.24, -0.88], [0.56, 0.23, 0.91]])
data * 10
data
data
data * 10
  • ndarray 是一个同构数据多维容器,即所有数据为相同类型
data.shape  # shape为属性   表示各维度大小的元组
data.dtype  # dtype说明数组数据类型的对象

创建ndarray

使用array函数,它接受一切序列型对象

data1 = [6, 7, 8, 6.5, 0, 1]
arr1 = np.array(data1)
arr1
data2 = [[1, 2, 3], [4, 5, 6]]
arr2 = np.array(data2)
arr2

使用zeros和ones函数创建数组

np.zeros(10)
np.zeros((2, 3))
np.empty((2, 2, 3))
  • arange 是Python内置函数range的数组版本
np.arange(10)

ndarray的数据类型

  • dtype用来将ndarray解释为特定数据类型
arr1 = np.array([1, 2], dtype=np.float64)
arr2 = np.array([1, 2], dtype=np.int32)
print(arr1.dtype)
print(arr2.dtype)
  • 通过astype可以显示地转换dtype
arr = np.array([1.2, 1.3, 1, 3, 4])
arr.dtype
int_arr = arr.astype(np.int32)
int_arr.dtype
  • 如果某字符串全部为数字,可以用astype将其转化为数值
numeric_strings = np.array(['1.2', '1.5'], dtype=np.string_)
numeric_strings.dtype
numeric_strings.astype(np.float64)
  • astype可以接受其他ndarray.dtype作为输入。这应该不难理解。
  • second


     print('hi')

数组和标量之间的运算

  • 大小相等的数组之间的所有运算都是元素级的
arr = np.arange(10)
arr + arr
arr ** 0.5     # ** 表示指数
arr

基本的索引和切片

arr
  • 切片时为 左包含右不包含
arr[5:8]
arr[5:8] = 12
  • 数组切片后依旧是一个数组
arr
  • 数组切片后,对切片的操作直接作用在源数组上
arr_slice = arr[5:8]
arr_slice[1] = 12345
arr
arr_slice[:] = 64
arr
  • 如果要得到一个切片的副本而非视图,需要显示的使用arr[5:8].copy
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d[2]
  • 对于2d数组的索引 以下两种方式是等价的
arr2d[0][2]
arr2d[0, 2]
  • 下图为ndarrary数组的索引方式
    PjWuFI.png
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d
arr3d[0]

切片索引

arr[1:6]
  • 对于多维度的数组,可以一次传入多个切片,中间用逗号隔开
arr2d[:2, 1:]
  • 通过将索引和切片结合,可以获得低维的切片
arr2d[1, :2]
arr2d[1]
arr2d
  • 值得注意地冒号表示选取整个轴
arr2d[:, :1]
  • 二维数组切片示意图
    PjWewd.png

布尔型索引

  • 使用randn函数生成一些正态分布的随机数据
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)  # 书中只使用了 randn 有误
names
data
data[:2, 2:]
names == 'Bob'
  • 这个布尔数组可以用于索引 数组长度必须和被索引数组长度一致
data[names == 'Bob']
  • - 可以用来对布尔值进行取反

  • 在Python中 与 和 或 只用一个符号来表示

mask = (names == 'Bob') | (names == 'Will')
mask
data[mask]

利用布尔型数组调整数值

data[data < 0] = 0
data

通过一维布尔数组设置整行或整列

data[names != 'Joe'] = 7
data

花式索引

  • 利用整数数组进行索引
arr = np.empty((8, 4))
for i in range(arr.shape[0]):
    arr[i] = i
arr
# 在选取特定顺序行子集时,可以传入一个用于指定顺序的整数列表或ndarray

arr[[4, 3, 0, 6]]
  • 使用 负数 索引会从末尾开始选取行
arr[[-1, -5, -7]]
  • 一次传入多个索引数组,相当于是分别对行和列索引,返回对应位置的元素
arr = np.arange(32).reshape((8, 4))
arr  # arange 和 reshape 搭配使用可以快速构造一些简单数组
arr[[1, 5, 7, 3], [0, 3, 1, 2]]
arr[[1, 5, 7, 3]][:, [0, 3, 1, 2]]
  • np.ix_可以将连个一维整数数组转换为选取方形区域的索引器
arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]
  • 花式索引会复制一个数组的副本

数组转置和轴对换

  • 转置时重塑的一种特殊形式,它返回源数据的视图
arr = np.arange(15).reshape((3, 5))
arr
arr.T
arr = np.random.randn(6, 3)

np.dot(arr.T, arr)
arr = np.arange(16).reshape((2, 2, 4))
arr
arr.transpose((1, 0, 2))

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

arr = np.arange(10)
np.sqrt(arr)
np.exp(arr)
x = np.random.randn(8)
y = np.random.randn(8)
x
y
np.maximum(x, y)
arr = np.random.randn(8) * 5
np.modf(arr)
arr

PjWKYt.png
PjWlSf.png
PjWMfP.png
PjW1l8.png

利用数组进行数据处理

points = np.arange(-5, 5, 0.01)
xs, ys = np.meshgrid(points, points)
ys
ys.shape
import matplotlib.pyplot as plt
z = np.sqrt(xs ** 2 + ys ** 2)
z
plt.imshow(z, cmap=plt.cm.gray)
plt.title('Image plot of $\sqrt{x^2 + y^2}$ for a grid of values')

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

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])
result = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
result
# 使用np.where来实现
result = np.where(cond, xarr, yarr)
result
arr = np.random.randn(4, 4)
arr
np.where(arr > 0, 2, -2)
np.where(arr > 0, 2, arr)

数学和统计方法

arr = np.random.randn(5, 4)
arr.mean()
np.mean(arr)
  • 既可以作为数组的一个实例方法调用,也可以作为Numpy的顶级函数使用。
arr.mean(1)
arr = np.arange(9).reshape((3, 3))
arr.cumsum(0)
arr.cumsum(1)  # cumsum 为依次相加,参数为轴的方向
arr.cumprod(0)
  • 基本数组统计方法
    PjWZeH.png

用于布尔型数组的方法

arr = np.random.randn(100)
(arr > 0 ).sum()   # 可以用sum函数对布尔值进行计数
45
bools = np.random.randn(5)
bools = np.where(bools > 0 , True,False)
bools
array([False, False,  True, False, False], dtype=bool)
bools.any()
True
bools.all()  # any 和 all 用来检测数组中真值的数量,存在,全部都是
False

排序

arr = np.random.randn(9)
arr
array([ 0.56648394,  0.09646596,  2.52960358,  1.01392528,  1.01635798,
        0.50707351,  0.6003978 ,  0.40438106, -0.40787323])
arr.sort()
arr
array([-0.40787323,  0.09646596,  0.40438106,  0.50707351,  0.56648394,
        0.6003978 ,  1.01392528,  1.01635798,  2.52960358])
arr = np.random.randn(5,3)
arr.sort(1)
arr        # sort函数可以用来对数组进行排序
array([[-0.09580399,  0.29251832,  1.03958502],
       [-0.56989704, -0.53186181,  0.5750816 ],
       [-0.8406608 ,  0.68156895,  2.12098301],
       [-0.35232795,  0.44457186,  1.13045437],
       [-0.74018734, -0.31642068,  1.46136771]])
  • np.sort 方法会返回一个数组的副本;而实例本身调用sort方法则会修改数组本身
large_arr = np.random.randn(1000)
large_arr.sort()

large_arr[int(0.05 * len(large_arr))] # 计算 5% 分位数
-1.5427390296814982

唯一化以及其他的集合逻辑

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
np.unique(names)
array(['Bob', 'Joe', 'Will'],
      dtype='<U4')
  • 数组的集合运算
    PjW36S.png

用于数组的文件输入输出

将数组以二进制的形式保存(暂时用不到)

作为文本文件存取数组(暂时用不到,相关读写操作可以用pandas组件实现)

线性代数

x = np.arange(6).reshape((2,3))
x
array([[0, 1, 2],
       [3, 4, 5]])
y = np.arange(6).reshape((3,2))
x.dot(y)
array([[10, 13],
       [28, 40]])
y.dot(x)
array([[ 3,  4,  5],
       [ 9, 14, 19],
       [15, 24, 33]])
  • numpy.linalg 中有一组标准的矩阵分解运算之类的函数
from numpy.linalg import inv,qr
X = np.random.randn(5,5)
mat = X.T.dot(X)
mat
array([[ 6.6222079 ,  2.37024094,  3.04849725, -6.13510153, -2.06561393],
       [ 2.37024094,  8.98202163,  4.6212979 , -3.02490862,  4.15413675],
       [ 3.04849725,  4.6212979 ,  5.14422425, -1.59640215,  2.76677395],
       [-6.13510153, -3.02490862, -1.59640215,  8.14871046,  4.16424202],
       [-2.06561393,  4.15413675,  2.76677395,  4.16424202,  6.8966607 ]])
inv(mat)
array([[  6.92376649,   7.23887753,  -2.51673305,  11.65615503,
         -8.31493388],
       [  7.23887753,   8.55271051,  -2.51461368,  13.22100216,
         -9.95764339],
       [ -2.51673305,  -2.51461368,   1.39594234,  -3.84337402,
          2.52150043],
       [ 11.65615503,  13.22100216,  -3.84337402,  21.04459734, -15.6373916 ],
       [ -8.31493388,  -9.95764339,   2.52150043, -15.6373916 ,  12.0828665 ]])
I = mat.dot(inv(mat))
np.where(np.fabs(I) < 0.01,0,I)
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])
q,r = qr(mat)
q
array([[-0.66000935,  0.16706919, -0.25898634, -0.58912734, -0.34975791],
       [-0.23623257, -0.76590412,  0.41085523,  0.11550852, -0.41885655],
       [-0.3038317 , -0.28146184, -0.73802815,  0.52204446,  0.10606395],
       [ 0.61146138, -0.07062138, -0.41330024, -0.13285758, -0.65776848],
       [ 0.2058716 , -0.54888124, -0.22050263, -0.59110507,  0.50825156]])
r
array([[-10.03350621,  -6.08472005,  -5.07325425,  11.08876476,
          3.50744819],
       [  0.        ,  -9.85059669,  -5.88395418,  -1.12001765,
         -8.38504438],
       [  0.        ,   0.        ,  -2.63770457,  -2.76179267,
         -3.04205653],
       [  0.        ,   0.        ,   0.        ,  -1.11256208,
         -1.48877537],
       [  0.        ,   0.        ,   0.        ,   0.        ,
          0.04206382]])

  • 常用的numpy.linalg函数
    PjW8Og.png

随机数生成

  • 随机数组生成函数
    PjWmTA.png

参考来源

  • 利用Python进行数据分析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_26967299/article/details/82251149

智能推荐

MongoDB环境安装配置(Windows)-程序员宅基地

一、官网下载MongoDB:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.11-signed.msi/download二、按程序安装步骤安装成功三、进入MongoDB安装目录,DATA目录下新建目录,可取名db 在BIN目录下,按住shi...

只能通过Chrome网上应用商店安装该程序_chrome网上应用商店tips-程序员宅基地

某些用户在Chrome插件网下载了Chrome插件后,不知道怎么才能把它安装到Chrome浏览器中,用户可以根据本站提供的教程:怎么在谷歌浏览器中安装.crx扩展名的离线Chrome插件?把下载后的扩展名为crx的Chrome插件安装到谷歌浏览器中。但是,由于一些特殊原因,极个别Chrome插件在使用上述的安装方法的时候,Chrome会提示“只能通过Chrome网上应用商店安装该程序”,如_chrome网上应用商店tips

love波频散方程matlab,Love波频散曲线和波结构曲线及其在覆层材料检测中的应用..._一切都是最好的的博客-程序员宅基地

自1911年Love首次提出Love波概念以来,Love波的研究引起了声学工作者的广泛关注。近年来,在Love波传播理论及实际应用方面已经取得了一定成果[1-2]。与此同时,Love波无损检测在地震工程、岩土工程、地球物理学及层状材料研究方面得到了应用[3-6]。令人遗憾的是,在Love波的理论研究与实际应用之间仍缺乏很好的融合[6]。笔者认为,Love波的理论研究应该包括分析波在介质中传播、质点...

搜索引擎solr和elasticsearch_elastic solr-程序员宅基地

刚开始接触搜索引擎,网上收集了一些资料,在这里整理了一下分享给大家。一、关于搜索引擎搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。一个搜索引擎由搜索器 、索引器_elastic solr

【论文泛读】An Unsupervised Information-Theoretic Perceptual Quality Metric-程序员宅基地

解决问题监督成本太高解决对策将信息理论目标函数的最新进展与由人类视觉系统生理学和对视频帧的无监督训练提供的计算架构相结合,得出感知信息度量(PIM)。创新点:PIM在最近的和具有挑战性的BAPPS图像质量评估数据集上与监督度量具有竞争力,并且在预测CLIC 2020中图像压缩方法的排名方面优于它们我们还使用ImageNet-C数据集进行定性实验,并确定PIM在架构细节方面是稳健的。手工设计的模型,如MS-SSIM,由于其简单和快速,仍然是流行的人类图像质量判断的预测器。...

随便推点

Android中读取word文件_android 阅读word文档-程序员宅基地

Android中读取word文件需要用第三方jar包tm-extractors-0.4.jar。读取的过程很简单,基本和操作普通的文件流一样,下面写一个简单例子: packagecom.word.read;import java.io.File;import java.io.FileInputStream;import java.io.FileNot_android 阅读word文档

(js)leetcode 172. 阶乘后的零-程序员宅基地

题目:给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为O(logn)。思路:参考思路两个数相乘结果末尾有 0,一定是因为两个数中有因子 2 和 5,因为 10 = 2 x 5。也就是说,问题转化为:n!最多可以分解出多少个因子 2 和 5这个主要取决于能分解出几个因子 5,...

Kettle强行关闭之后无法启动,闪退-程序员宅基地

现象:正在正常使用,突然闪退,之后双击Spoon.bat后,弹出启动页面,然后闪退。解决方案:首先修改Spoon.bat中的配置信息,将其修改为:if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx256m" "-XX:MaxPermSize=256m"然后重启Spoon.bat后,问题仍无法解决。然后找到以下路径,将.kettle文件夹全部删掉,问题解决。C:\Users\PC\

推荐博客规则、博客积分规则、博客排名规则、博客专家分类、博客专家申请规则、博客勋章、博客专栏、博客搬家-程序员宅基地

推荐博客规则程序员宅基地所有用户均有机会推荐自己的博文到博客频道首页。发布博文时选中“发布到程序员宅基地首页”单选框即可。用户推荐要求:a. 博主积分需超过100分,否则不能推荐自己博客文章到频道首页b. 普通用户每天有5次机会推荐自己的博文到博客频道首页,博客专家无次数限制。c.推荐到频道首页必需是高质量、对别人有帮助的文章d. 发布到首页后,一旦被管理员撤下

用pl/sql分割字符串-程序员宅基地

http://www.blogjava.net/ilovebabyfat/archive/2011/06/29/353358.htmlhttp://space.itpub.net/441887/viewspace-666310 http://xiaobo.iteye.com/blog/310628 oracle分隔后入数组中:create or replace pro...

【Bug】 VMware workstation 一启动centos 8 Win10系统就蓝屏错误 page falut in nonpaged area_centos8启动蓝屏-程序员宅基地

自身环境操作系统: win10VMWare Workstation: 15.0 pro目前蓝屏现象复现点:vmtools 传输稍大文件时<kali和win7均存在此问题>vm自身的bug或是win10的兼容性问题。同理,其他软件使用时出现此蓝屏代码,可考虑升级最新版本解决!..._centos8启动蓝屏