2:numpy---ndarray
ndarray即是多维数组【n dimension array】
有好几种创建数组的方法。
例如,你可以使用 array
函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。
>>> import numpy as np
>>> a = np.array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
dtype('float64') 一个常见的错误包括用多个数值参数调用`array`而不是提供一个由数值组成的列表作为一个参数。
>>> a = np.array(1,2,3,4) # WRONG
>>> a = np.array([1,2,3,4]) # RIGHT
数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等等。
>>> data =
[ [1.5,2,3], [4,5,6] ]
>>> b = np.array( data )
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
数组类型可以在创建时显示指定
>>> c = array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
通常,数组的元素开始都是未知的,但是它的大小已知。因此,NumPy提供了一些使用占位符创建数组的函数。这最小化了扩展数组的需要和高昂的运算代价。
函数 function
创建一个全是0的数组,函数 ones
创建一个全1的数组,函数empty
创建一个内容随机并且依赖与内存状态的数组【默认创建的数组类型(dtype)都是float64】
>>> zeros(( 3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>> ones( (2,3,4), dtype=int16 ) # dtype can also be specified
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
>>> empty( (2,3) )
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
为了创建一个数列,NumPy提供一个类似arange的函数返回数组而不是列表:
>>> arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
当 arange
使用浮点数参数时,由于有限的浮点数精度,通常无法预测获得的元素个数。因此,最好使用函数 linspace
去接收我们想要的元素个数来代替用range来指定步长。
其它函数array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, rand, randn, fromfunction, fromfile参考:NumPy示例
二:numpy的数据类型【dtype】
数字,字符串,对象,unicode
= np.array(
[ [1,2,3], [4,5,6] ,[7,8,9]])
= np.array(
[[1,2,3], [4,5,6] ,[7,8,9]])
-->array([[1, 2, 3],
[4, 5, 6]])
arr[0:2,1]
-->array([2, 5])
arr[0:2,0:2]
-->array([[1, 2],
[4, 5]])
注:可以利用切片进行批量赋值[切记操作都是元素性的]
arr[0:2,0:2] = 9
arr
-->array([[9, 9, 3],
[9, 9, 6],
[7, 8, 9]])
names == 'bob'
-->array([ True, False, False, True, False, False, False], dtype=bool) #意思即是会产生一个布尔型的array数组
data = np.random.randn(5,4)
data
-->array([[-0.00343354, 0.50658368, 0.26039623, -1.17846766],
[ 0.10990542, 0.52022534, -1.10899795, -2.11391774],
[-0.69619996, 0.25121838, -0.50346134, -0.4248276 ],
[ 0.48882343, -1.409604 , -0.38028868, 0.4928941 ],
[-0.03851536, -1.6177832 , 0.24822048, 0.79837076]])
data[names == "bob"]
-->array([[-0.00343354, 0.50658368, 0.26039623, -1.17846766],
[ 0.48882343, -1.409604 , -0.38028868, 0.4928941 ]])
注:还可以和切片联合使用
date[names == "bob",2:]
-->array([[ 0.26039623, -1.17846766],
[-0.38028868, 0.4928941 ]])
4)花式索引【fancy indexing】:利用整数数组进行索引
arr = np.empty((8,4))
arr
-->array([[ 3.63521590e+228, 6.96747054e+252, 5.81241635e+180,2.30074046e-312],
[ 3.16276242e-316, 3.24199869e-316, 3.16276242e-316,2.30320756e-316],
[ 2.30321230e-316, 2.44349454e-316, 2.30320993e-316,3.18366574e-316],
[ 2.30320756e-316, 2.30321942e-316, 2.30320993e-316,3.18366574e-316],
[ 2.30320756e-316, 2.30321942e-316, 2.30320756e-316,2.44346371e-316],
[ 3.22628503e-316, 3.22637041e-316, 3.22628266e-316,2.44349928e-316],
[ 3.22635618e-316, 3.24213624e-316, 2.30320282e-316,3.16264621e-316],
[ 2.30320756e-316, 3.22635618e-316, 3.22637041e-316,3.22635618e-316]])
for i in range(8):
arr[i] = i
arr
-->array([[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 2., 2., 2., 2.],
[ 3., 3., 3., 3.],
[ 4., 4., 4., 4.],
[ 5., 5., 5., 5.],
[ 6., 6., 6., 6.],
[ 7., 7., 7., 7.]])
arr[[0,3,6]] #!!两个【【 】】 -号表示反向
-->array([[ 0., 0., 0., 0.],
[ 3., 3., 3., 3.],
[ 6., 6., 6., 6.]])
arr[[-0,-3,-6]]
-->array([[ 0., 0., 0., 0.],
[ 5., 5., 5., 5.],
[ 2., 2., 2., 2.]])
arr = np.arange(32).reshape((8,4)) #reshape方法对前面的一维数组元素重新排列
arr
-->array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
arr[[1,5,7,2],[0,3,1,2]] #先选出行,再在对应行选出列元素
-->array([ 4, 23, 29, 10])
注:数组切片是原始数组的视图,也就是说数据不被复制,改动会直接反映到原数组上,与python里的切片不同!!
布尔索引与花式索引会创建副本
五:数组转置和轴对换
六:通用函数
abs:绝对值
sqr:平方根 <--------> square:平方
floor:取小于此数的最大整数 <-----> ceil
tan(h),cos(h),sin(h):h表示反三角函数
e.g:
arr = np.arange(10)
np.sqrt(arr)
--->array([ 0. , 1. , 1.41421356, 1.73205081, 2. ,2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
七:利用ndarray进行数据处理
e.g 1:计算sqrt(x^2+y^2) np.meshgrid()方法接收两个一维数组产生两个二维矩阵
points = np.arange(-5,5,1)
points
-->array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
xs , ys = np.meshgrid(points,points)
ys
-->array([[-5, -5, -5, -5, -5, -5, -5, -5, -5, -5],
[-4, -4, -4, -4, -4, -4, -4, -4, -4, -4],
[-3, -3, -3, -3, -3, -3, -3, -3, -3, -3],
[-2, -2, -2, -2, -2, -2, -2, -2, -2, -2],
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
[ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]])
xs
-->array([[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]])
z = np.sqrt(xs**2+ys**2)
z
-->array([[ 7.07106781, 6.40312424, 5.83095189, 5.38516481, 5.09901951,5. , 5.09901951, 5.38516481, 5.83095189, 6.40312424],
[ 6.40312424, 5.65685425, 5. , 4.47213595, 4.12310563,4. , 4.12310563, 4.47213595, 5. , 5.65685425],
[ 5.83095189, 5. , 4.24264069, 3.60555128, 3.16227766,3. , 3.16227766, 3.60555128, 4.24264069, 5. ],
[ 5.38516481, 4.47213595, 3.60555128, 2.82842712, 2.23606798,2. , 2.23606798, 2.82842712, 3.60555128, 4.47213595],
[ 5.09901951, 4.12310563, 3.16227766, 2.23606798, 1.41421356,1. , 1.41421356, 2.23606798, 3.16227766, 4.12310563],
[ 5. , 4. , 3. , 2. , 1. ,0. , 1. , 2. , 3. , 4. ],
[ 5.09901951, 4.12310563, 3.16227766, 2.23606798, 1.41421356,1. , 1.41421356, 2.23606798, 3.16227766, 4.12310563],
[ 5.38516481, 4.47213595, 3.60555128, 2.82842712, 2.23606798,2. , 2.23606798, 2.82842712, 3.60555128, 4.47213595],
[ 5.83095189, 5. , 4.24264069, 3.60555128, 3.16227766,3. , 3.16227766, 3.60555128, 4.24264069, 5. ],
[ 6.40312424, 5.65685425, 5. , 4.47213595, 4.12310563,4. , 4.12310563, 4.47213595, 5. , 5.65685425]])
e.g2:逻辑运算的数组表示
arr = np.random.randn(4,4)
arr
-->array([[-1.51211007, 0.51280389, -0.62088368, -1.35715715],
[ 1.13127552, -0.98699052, -0.12450559, -0.81690629],
[ 1.08641757, 1.89675729, 0.54465751, -0.40756964],
[-1.92890717, -0.76061215, -1.67972853, 1.94591207]])
np.where(arr>0, 2 , arr) #将正值转化为2
-->array([[-1.51211007, 2. , -0.62088368, -1.35715715],
[ 2. , -0.98699052, -0.12450559, -0.81690629],
[ 2. , 2. , 2. , -0.40756964],
[-1.92890717, -0.76061215, -1.67972853, 2. ]])
e.g3:数学与统计方法:
对整个数组或某个轴向的数据进行统计计算
方法:sum,mean:算术平均数,std:标准差,var:方差,min,max,argmin最小值的索引,argmax,cumsum累积和,sumprod累计积
注:以上方法几乎都可以接受一个参数0或1,0代表列对待,1代表行对待
arr = np.array([[0,1,2],[3,4,5],[6,7,8]])
arr.min()
0
arr.sum()
36
arr.sum(1)
-->array([ 3, 12, 21])
arr.sum(0)
-->array([ 9, 12, 15])
arr.min(1)
-->array([0, 3, 6])
arr.min(0)
-->array([0, 1, 2])
(arr>0).sum(0)#在上面的那些方法中bool型会被强制转化为1或0
-->array([2, 3, 3])
(arr>0).sum()
8
e.g5:排序
sort方法
arr.sort(【0或1】)
e.g6:唯一化,unique()函数,去掉重复函数
np.unique(arr)
e.g7:集合逻辑函数
inld(x,y):返回一个x集合的元素是否包含在y集合中的bool型数组
unionld(x,y):计算x,y的并集并返回有序结果
intersectld(x,y):计算x,y的交集并且返回有序结果
setdiffld(x,y):在x但不在y中的元素
setxorld(x,y):仅在其中一个数组存在的元素
e.g8:随机数相关
numpy.random模块提供了许多生成随机数的方式
e.g:sample = np.random.normal(size=(4,4)) #即是生成一个标准正太分布的4X4数组
还有许多其他的生成方式就不赘述了
2:numpy---ndarray的更多相关文章
- python中numpy.ndarray.shape的用法
今天用到了shape,就顺便学习一下,这个shape的作用就是要把矩阵进行行列转换,请看下面的几个例子就明白了: >>> import numpy as np >>> ...
- has invalid type <class 'numpy.ndarray'>, must be a string or Tensor
转自: https://blog.csdn.net/jacke121/article/details/78833922 has invalid type <class 'numpy.ndarra ...
- NumPy Ndarray 对象
NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放 ...
- numpy.random.random & numpy.ndarray.astype & numpy.arange
今天看到这样一句代码: xb = np.random.random((nb, d)).astype('float32') #创建一个二维随机数矩阵(nb行d列) xb[:, 0] += np.aran ...
- Python中Numpy ndarray的使用
本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...
- Numpy ndarray 的高级索引存在 "bug" ?
Numpy ndarray 高级索引 "bug" ? 话说一天,搞事情,代码如下 import numpy as np tmp = [1, 2, 3, 4] * 2 a, b = ...
- torch.Tensor和numpy.ndarray
1. torch.Tensor和numpy.ndarray相互转换 import torch import numpy as np # <class 'numpy.ndarray'> np ...
- Numpy Ndarray对象1
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指 针.这样为了保存一个简单的[1,2,3],需要有3个指针和三 ...
- python:<class 'numpy.ndarray'>的学习
在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2 ...
- 解决Tensorflow ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray)
问题描述 在将一个数组送入tensorflow训练时,报错如下: ValueError: Failed to convert a NumPy array to a Tensor (Unsupporte ...
随机推荐
- new date() 函数在浏览器中的兼容问题!!
引言: 同一种语言javascript,在不同的浏览器中,存在语言兼容性问题,本质上是由于不同的浏览器是支持的语言标准和实现上各有差异.本文将基于new Date来创建Date对象来分析这个问题. v ...
- QC 2.0为啥可以快充
根据高通给出的数据,Quick Charge 2.0 A级标准规定的最大充电电流为3A,如果在5V的情况下,充电功率就为15W,因此充电速度要比最高支持10W的Quick Charge 1.0技术更快 ...
- 不用修改nginx的高并发合并回源架构
nginx的连接都是一对一的,想改成一对多,比较麻烦,所以曾经看完了Nginx代码想改成一对多,我还是没改成,后来改变了一下思路想到一个更简单的方案,而且不失并发性能,还容易控制,下面先给出下面的图: ...
- ANDROID 自动生成动态表格for
简单的栗子去了解这个自动生成的动态的控件(自动生成表格) /cs-Layout/res/layout/activity_main.xml <LinearLayout xmlns:android= ...
- Golang http包下FileServer的使用
FileServer文档:https://godoc.org/net/http#FileServer 今天看到http的 Handle 方法,所以就像试试,就找到FileServer FileServ ...
- MySql 到 SQL Server(MSSQL)
我用 MySql 2年了,一直都是 asp.net + MySql 开发 为什么不用 MSSQL呢? 原因 : 在我的国家,几乎找不到任何一间托管公司有提供 SQL SERVER 的,有的话也是 20 ...
- 开源一套DirectUI界面库
http://www.cppblog.com/weiym/archive/2012/07/03/181307.html
- Another Look at Events(再谈Events)
转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...
- 二叉查找树:Python实现
#coding:utf8 #author:HaxtraZ class BST(object): """二叉查找树的简单实现""" def _ ...
- GitHub的使用详解!Windows GitHub ,Sublime Git GitGutter的使用!
Github是什么? 它是代码管理工具. 在公司写的代码,不需要U盘拷贝回家,不需要放到网盘中.只需要上传到git上,就可以回家继续拷贝下来了. 比起svn要好, svn只适合局域网工作,离开局域网, ...