Python数据分析库-Numpy库在数据分析中的知识点(二)
各位客官姥爷好,欢迎回来。上节我们了解numpy中数组的创建方法,这节我们来看看数组都有哪些常用的属性,以及数组的浅拷贝与深拷贝的用法。
01
数组的属性
0.声明一个numpy的数组
np.random.seed(0)
x = np.random.randint(1,10,(2,3))
x
array([[6, 1, 4],
[4, 8, 4]])
1.数组的类型
x.dtype
dtype('int32')
2.数组的维数
x.ndim
2
3.数组的维度
x.shape
(2, 3)
4.数组的元素个数
x.size
6
5.数组每个元素所占字节数
x.itemsize
4
6.数组所有元素总字节数(等于x.size * x.itemsize)
x.nbytes
24
7.数组在内存中布局的信息
x.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
8.数组实部
x.real
array([[6, 1, 4],
[4, 8, 4]])
9.数组的虚部
x.imag
array([[0, 0, 0],
[0, 0, 0]])
10.数组的转置属性
x.T
array([[6, 4],
[1, 8],
[4, 4]])
11.数组的一维迭代器
y = x.flat
for i in y:
print(i)
6
1
4
4
8
4
当然也可通过这个迭代器去更改数组的元素
#比如全部改为9
x.flat = 9
x
array([[9, 9, 9],
[9, 9, 9]])
02
数组的转化
1. 数组与列表的互转
#列表转为数组
x = [i for i in range(5)]
arr = np.array(x)
print(arr,type(arr))
#数组转为列表
y = arr.tolist()
print(y, type(y))
[0 1 2 3 4] <class 'numpy.ndarray'>
[0, 1, 2, 3, 4] <class 'list'>
2. 数组与元组的互转
没有直接转化的函数,这里使用python自带的类型转换函数
#元组转化为数组
x= (i for i in range(5))
arr = np.array(list(x))
print(arr,type(arr))
#数组转化为元组
y = tuple(arr.tolist())
print(y, type(y))
[0 1 2 3 4] <class 'numpy.ndarray'>
(0, 1, 2, 3, 4) <class 'tuple'>
3. 数组类型的强制转化
#强制转化为float32,在转换类型时建议带上np.xx类型,避免有错误提示。
x= (i for i in range(5))
arr = np.array(list(x))
print(arr,type(arr))
arr.astype(np.float32)
[0 1 2 3 4] <class 'numpy.ndarray'>
array([0., 1., 2., 3., 4.], dtype=float32)
03
数组的浅拷贝与深拷贝
浅拷贝和深拷贝针对的是可变类型,而数组属于可变类型,故可使用。下面就来看看浅拷贝和深拷贝在numpy数组中的区别。
1. 浅拷贝
浅拷贝,是指新的对象和源对象指向同一个内存空间。注意这里的关键词:新对象和源对象,这两个是不同的对象。而我们通常在数组中用的赋值,只是给源对象起个别名,对象还是那个对象。
x = np.arange(5)
y = x
print(x is y)
True
在numpy中view视图的用法相当于浅拷贝。
arr = np.arange(5)
drr = arr.view()
print(arr is drr)
drr[0] =5
print(drr,arr)
False
[5 1 2 3 4] [5 1 2 3 4]
更改新建视图的元素后,原始数组也发生变化。
2. 深拷贝
通过上面的浅拷贝可以看出,这样很容易出现数据安全问题,对此出现了深拷贝,一个完全独立于源对象的副本。可直接使用数组的copy()方法实现
arr = np.arange(5)
frr = arr.copy()
print(arr is frr)
frr[0] = 10
print(frr,arr)
False
[10 1 2 3 4] [0 1 2 3 4]
当然,也可使用我们上节学过的用法:
1)array的copy参数
arr = np.arange(5)
err = np.array(arr,copy=True)
print(arr is err)
err[0] = 15
print(err,arr)
False
[15 1 2 3 4] [0 1 2 3 4]
2)array的subok参数
arr = np.arange(5)
crr = np.array(arr,subok=True)
print(arr is crr)
crr[0] = 20
print(crr,arr)
False
[20 1 2 3 4] [0 1 2 3 4]
以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!