目录
一. 复习创建ndarray对象:
numpy.array(object, dtype = None,
copy = True, order = None,
subok = False, ndmin = 0)
二、学习新知识
1.使用arange()生成区间数组:
1.1 arange()
numpy.arange(start,stop,step,dtype)
如np.arange(10)
输出:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
默认是从0开始的。
如np.arange(3.1)
输出:
array([0., 1., 2., 3.])
加上类型:
x = np.arange(5, dtype = float)
print(x)
输出:
[0. 1. 2. 3. 4.]
加上步长:
np.arange(10,20,2)
输出:
array([10, 12, 14, 16, 18])
起始是0,终止是20,步长3:
ar2 = np.arange(20,step = 3)##等价于ar2=np.arange(0,20,3)
print(ar2)
输出:
[ 0 3 6 9 12 15 18]
如何防止float不精确影响numpy.arange
1.2 linspace()创建等差数列
np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None) ##默认步长50
如a = np.linspace(1,10,10)
a
输出:
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
使用等差数列,实现输出0 0.5 1 1.5 2 2.5 3 3.5 4
A = np.linspace(0, 4, 9)
A
输出:
array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ])
endpoint的作用:默认为True,包含终止值。若设置为False,不包含终止值。
ar1 = np.linspace(2.0, 3.0, num=5, endpoint=False) #不包含终止值
ar1
输出:
array([2. , 2.2, 2.4, 2.6, 2.8])
retstep:默认为False,设置retstep显示计算后的步长
ar1 = np.linspace(2.0, 3.0, num=5, retstep=True) #得到一个元组
ar1
输出:
(array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
想得到一个长度为10的,从0.1开始的、间隔为0.1的数组:
np.linspace(0.1,1,10)
输出:
array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
1.3 logspace创建等比数列
np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)
如:a = np.logspace(0, 9, 10, base=2)#base是基数
输出:
array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])
np.logspace(A,B,C,base=D)
A:生成数组的起始值为D的A次方
B:生成数组的结束值为D的B次方
C:共生成C个数
D:指数型数组的底数为D,当省略base=D时,默认底数为10
取得1到2之间10个常用数:
np.logspace(1.0, 2.0, num=10)
输出:
array([ 10. , 12.91549665, 16.68100537, 21.5443469 ,
27.82559402, 35.93813664, 46.41588834, 59.94842503,
77.42636827, 100. ])
endpoint和dtype同上
1.4.全0数列
创建指定大小的数组,数组元素以0来填充
numpy.zeros(shape,dtype = float ,order = 'C')
默认为浮点数np.zeros(5)
输出:
array([0., 0., 0., 0., 0.])
设置为整型:np.zeros(5, dtype = 'int')
输出:
array([0, 0, 0, 0, 0])
2行2列的全0数组:np.zeros((2,2))
输出:
array([[0., 0.],
[0., 0.]])
2块2行3列的数组:
np.zeros((2,2,3))
输出:
array([[[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.]]])
zeros_like返回具有与给定数组相同的形状和类型的0数组
如:
ar1 = np.array([[1,2,3],[4,5,6]])
np.zeros_like(ar1)
输出:
array([[0, 0, 0],
[0, 0, 0]])
1.5.全1数列
ar5 = np.ones(9)
ar6 = np.ones((2,3,4))
ar7 = np.ones_like(ar3)
print('ar5:',ar5)
print('ar6:',ar6)
print('ar7:',ar7)
ar3在numpy学习(一)里:ar3 = np.array([[1,2,3],('a','b','c')])#二维数组:嵌套序列(列表,元组均可)
输出:
ar5: [1. 1. 1. 1. 1. 1. 1. 1. 1.]
ar6: [[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
ar7: [['1' '1' '1']
['1' '1' '1']]
2.NumPy 数组属性
2.1ndarray.ndim
ndarray.ndim 返回数组的维度(秩):是一个标量,一维数组的秩为1,二维数组的秩为2
举例:
a = np.array([1,2,3,4,5,6])
b = a.reshape((2,3))
c = np.array([
[
[1,2,3],
[4,5,6]
],
[
[11,22,33],
[44,55,66]
]
])
print('a的ndim:', a.ndim)
print('b的ndim:', b.ndim)
print('c的ndim:', c.ndim)
输出:
a的ndim: 1
b的ndim: 2
c的ndim: 3
2.2 ndarray.shape
ndarray.shape 返回一个包含数组维度的元组,比如对于矩阵,返回n行m列的元组。它也可以用于调整数组维度。
比如:
a = np.array([1,2,3,4,5,6])
print('一维数组:',a.shape)
b = np.array([[1,2,3],[4,5,6]])
print('二维数组:', b.shape)
c = np.array([
[
[1,2,3],
[4,5,6]
],
[
[11,22,33],
[44,55,66]
]
])
print('三维数组:',c.shape)
输出:
一维数组: (6,)
二维数组: (2, 3)
三维数组: (2, 2, 3)
调整数组大小:
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print (a)
输出:
[[1 2]
[3 4]
[5 6]]
NumPy 也提供了 reshape 函数来调整数组大小:
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print (b)
输出:
[[1, 2]
[3, 4]
[5, 6]]
调整维度reshape 返回调整后的副本,而不改变原ndarray:
a = np.arange(20)
b = a.reshape(4,5)
print("a:",a)
print("b:",b)
输出:
a: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
b: [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
调整维度resize ,会改变原数组:
a = np.arange(20)
b = a.resize(4,5)
print("a:",a)
print("b:",b)
输出:
a: [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
b: None
numpy.resize(a, new_shape) 如果新数组大于原始数组,则新数组将填充a的重复副本,如
a = np.array([[0,1],[2,3]])
b_2_3 = np.resize(a,(2,3))
b_2_3
输出:
array([[0, 1, 2],
[3, 0, 1]])
用0填充:
a.resize((3,4),refcheck=False)#或者a.resize(3,4)
a
输出:
array([[0, 1, 2, 3],
[0, 0, 0, 0],
[0, 0, 0, 0]])
2.3 ndarray.size
ndarray.size 数组元素的总个数,相当于.shape中的n*m的值
a = np.array([1,2,3,4,5,6])
print('a的size:', a.size)
b = np.array([[1,2,3],[4,5,6]])
print('b的size:',b.size)
输出:
a的size: 6
b的size: 6
2.3 ndarray.dtype
ndarray.dtype ndarray对象的元素类型
a = np.array([1,2,3,4,5,6])
print('a的dtype:', a.dtype)
b = np.array([[1,2,3],[4,5,6]])
print('b的dtype:',b.dtype)
输出:
a的dtype: int32
b的dtype: int32
astype 类型转换 numpy数据类型转换,调用astype返回数据类型修改后的数据,但是源数据的类型不会变:
a = np.array([1.1,1.2])
print('a的数据类型:',a.dtype)
print('astype修改数据类型:',a.astype('float32').dtype)
print('原数据类型未改变' , a.dtype)
#正确操作
a = a.astype('float32')
print('修改类型后再次操作,类型改变:',a.dtype)
输出:
a的数据类型: float64
astype修改数据类型: float32
原数据类型未改变 float64
修改类型后再次操作,类型改变: float32
2.4 ndarray.itemsize
ndarray.itemsize 以字节的形式返回数组中每一个元素的大小
a = np.array([1.1,2.2,3.3])
print('dtype:',a.dtype, 'itemsize:', a.itemsize)
b = np.array([1,2,3,4,5])
print('dtype:',b.dtype, 'itemsize:', b.itemsize)
输出:
dtype: float64 itemsize: 8
dtype: int32 itemsize: 4
2.5 ndarray.flags
ndarray.flags 返回 ndarray 对象的内存信息,包含以下属性:
x = np.array([1,2,3,4,5]) print (x.flags)
输出:
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
2.6 ndarry.real和ndarry.imag
ndarry.real和ndarry.imag 返回数组的实部和虚部
x = np.sqrt([1+0j, 0+1j])
print("x实部:",x.real.dtype,x.real)
print("x虚部:",x.imag.dtype,x.imag)
输出:
x实部: float64 [1. 0.70710678]
x虚部: float64 [0. 0.70710678]
2.7 ndarray.data
ndarray.data返回数组的缓冲区
x = np.arange(5, dtype = np.int8)
print(x.data)
输出:
<memory at 0x000001CE1D867700>