赞
踩
Numpy的介绍
NumPy 是 Python 语言的一个第三方库,其支持大量高维度数组与矩阵运算。
是一个开源的python科学计算库,它代表 “Numeric Python”。
它是一个由多维数组对象和用于处理数组的例程集合组成的库。
NumPy 也针对数组运算提供大量的数学函数。机器学习涉及到大量对数组的变换和运算,
NumPy 就成了必不可少的工具之一。
Numpy还包括了许多数学函数,线代、随机数生成等
Numpy可以取代一些数学软件
Python + Numpy == Matlab
NumPy - Ndarray 对象
NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
构造器如下:
numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)
ndarray(N-dimensional array)
ndarray是整个numpy的基础,是N-demensional array的缩写,是一种由同质元素组成的多维数组。每个ndarray只要一种dtype类型。
#导入numpy
import numpy as np
a=[1,2,3,4,5,6,7,8,9]
print(a)
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9]
a*2
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(type(a))
输出
<class ‘list’>
#把普通的python中的list转换成ndarray
A=np.array(a)
print(A)
输出
[1 2 3 4 5 6 7 8 9]
A
输出
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(type(A))
输出
<class ‘numpy.ndarray’>
A*2
输出
array([ 2, 4, 6, 8, 10, 12, 14, 16, 18])
#直接创建一维数组
b=np.array([1,2,3,4,5])
print(b)
输出
[1 2 3 4 5]
print(type(b))
输出
<class 'numpy.ndarray'>
b*6
array([ 6, 12, 18, 24, 30])
#创建多维数组
c=np.array([[1,2,3],[4,5,6]])
print(c)
输出
[[1 2 3]
[4 5 6]]
print(type(c))
- List item
输出
<class 'numpy.ndarray'>
c*2
输出
array([[ 2, 4, 6],
[ 8, 10, 12]])
cc=[[1,2,3],[4,5,6]]
cc*2
输出
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
print(c.ndim)#几维
输出
2
print(c.shape)#几行几列
输出
(2, 3)
print(c.size)#包含元素
输出
6
print(c.dtype)#类型
输出
int32
d=np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(d)
print(d.ndim)
输出
[[[1 2 3]
[4 5 6]
[7 8 9]]]
3
print(d.shape)
输出
(1, 3, 3)
print(d.size)
输出
9
dd=np.array([[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]])
print(dd.shape)
输出
(2, 3, 3)
print(dd.size)
输出
18
#指定维度来创建多维数组
e=np.array([1,2,3,4,5,6],ndmin=3)
e.dtype
输出
dtype('int32')
type(e)
输出
numpy.ndarray
print(e)
输出
[[[1 2 3 4 5 6]]]
print(e.shape)
输出
(1, 1, 6)
#指定维度和数值类型来创建多维数组
f = np.array([1,2,3,4,5,6],ndmin=3,dtype=np.complex)
print(f)
输出
[[[1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]]]
f.data
输出
<memory at 0x000002643059E6D8>
f.flat
输出
<numpy.flatiter at 0x26478a91010>
print(f.itemsize)
输出
16
a=np.empty([3,2],dtype=np.int32)
a
输出
array([[618914272, 565],
[ 0, 0],
[ 1, 0]])
print(a.shape)
输出
(3, 2)
# numpy.eye 函数返回对角线为1,其余为0的数组
d=np.eye(5)
print(d)
输出
[[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.]]
#array与asarray区别 传入参数是list等一般数组类型是,两者没有区别;当传入参数是ndarray类型时,前者会拷贝原数据,开辟新的内存在储存它,就是新建了一个ndarray对象。而asarray与原参数共享一个内存
x=[1,2,3,4,5,6]
a=np.asarray(x)
print(type(x))
print(type(a))
输出
<class 'list'>
<class 'numpy.ndarray'>
print(x)
print(a)
输出
[1, 2, 3, 4, 5, 6]
[1 2 3 4 5 6]
arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值
linspace函数通过指定开始值、终值和元素个数来创建一维数组可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值
x=np.arange(10)
print(type(x))
print(x)
输出
<class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
x=np.arange(10,dtype=np.float32)
print(x)
输出
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
x=np.linspace(10,20,5)
print(x)
输出
[10. 12.5 15. 17.5 20. ]
#retstep=True 返回步长值
np.linspace(10,20,5,retstep=True)
输出
(array([10. , 12.5, 15. , 17.5, 20. ]), 2.5)
np.linspace(0, 1, 10)
输出
array([0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])
np.linspace(0,1,10,endpoint=False)
输出
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
np.linspace(0.1,1.1,10,endpoint=False)
输出
array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
logspace函数和linspace类似,不过它创建等比数列
np.logspace(0,2,20)
输出
array([ 1. , 1.27427499, 1.62377674, 2.06913808,
2.6366509 , 3.35981829, 4.2813324 , 5.45559478,
6.95192796, 8.8586679 , 11.28837892, 14.38449888,
18.32980711, 23.35721469, 29.76351442, 37.92690191,
48.32930239, 61.58482111, 78.47599704, 100. ])
np.linspace(0,2,20)
输出
array([0. , 0.10526316, 0.21052632, 0.31578947, 0.42105263,
0.52631579, 0.63157895, 0.73684211, 0.84210526, 0.94736842,
1.05263158, 1.15789474, 1.26315789, 1.36842105, 1.47368421,
1.57894737, 1.68421053, 1.78947368, 1.89473684, 2. ])
a=np.arange(10)
a
输出
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[5]
输出
5
a[3:5]
输出
array([3, 4])
a[:5]
输出
array([0, 1, 2, 3, 4])
a[:-1]
输出
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
a[2:4]=100,101
a
输出
array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
print(a[1:-1:2])
输出
[ 1 101 5 7]
b=a[3:7]
b
输出
array([101, 4, 5, 6])
b[2]=-10
b
输出
array([101, 4, -10, 6])
a=np.array([-45,-66,2,25,99,-33])
b=a
b is a
输出
True
id(a)
id(b)
输出
2048392233008
a==b
输出
array([ True, True, True, True, True, True])
a[0]=6
a
输出
array([ 6, -66, 2, 25, 99, -33])
b
输出
array([ 6, -66, 2, 25, 99, -33])
b[0]=2
a
输出
array([ 2, -66, 2, 25, 99, -33])
b
输出
array([ 2, -66, 2, 25, 99, -33])
e=np.array([-45,-66,2,25,99,-33])
浅拷贝
定义:浅拷贝是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。
注:仅仅拷贝的是目标变量的所在地址,目标变量的所在地址不发生任何变化。
公用一个值;
这两个变量的内存地址一样;
对其中一个变量的值改变,另外一个变量的值也会改变;
深拷贝
定义:一个变量对另外一个变量的值拷贝。
注:拷贝的是目标变量的值,是真实的拷贝,新的变量产生了新的内存地址。
变量的内存地址不同;
变量各有自己的值,且互不影响;
对其任意一个变量的值的改变不会影响其余变量的值
View 视图
view相当于传引用,view和原始数据共享一份数据,修改一个会影响另一个。
slice,array.view(dtype)可以产生view,但array.astype(dtype)产生的不是view
f=e.view()#浅拷贝
id(e)
输出
2048392236448
id(f)
输出
2048392355888
f.shape=(2,3)
f
输出
array([[-45, -66, 2],
[ 25, 99, -33]])
e[0]=0
e
输出
array([ 0, -66, 2, 25, 99, -33])
f
输出
array([[ 0, -66, 2],
[ 25, 99, -33]])
f[1,1]=88
f
输出
array([[ 0, -66, 2],
[ 25, 88, -33]])
e
输出
array([ 0, -66, 2, 25, 88, -33])
g=np.copy(e)#深拷贝
g
输出
array([ 0, -66, 2, 25, 88, -33])
e[0]=8
e
输出
array([ 8, -66, 2, 25, 88, -33])
g
输出
array([ 0, -66, 2, 25, 88, -33])
id(e)
输出
2048392236448
id(g)
输出
2048392358848
x=np.arange(5,0,-1)
x
输出
array([5, 4, 3, 2, 1])
x[np.array([True,False,True,False,False])]
输出
array([5, 3])
#布尔数组中下标为0,2的元素为True,因此获取X中下标为0,2的元素
x[np.array([True,False,True,True,False])]=-1,-2,-3
x
输出
array([-1, 4, -2, -3, 1])
#产生一个长度为10,元素值为0-1的随机数的数组
x=np.random.rand(10)
x
输出
array([0.19587602, 0.05381538, 0.58195263, 0.53318967, 0.38403005,
0.56208597, 0.60598911, 0.96842994, 0.70864445, 0.59090746])
x[x>0.5]
输出
array([0.58195263, 0.53318967, 0.56208597, 0.60598911, 0.96842994,
0.70864445, 0.59090746])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。