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.flatfor i in y: print(i)

6

1

4

4

8

4

当然也可通过这个迭代器去更改数组的元素

#比如全部改为9x.flat = 9x

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 = xprint(x is y)

True

在numpy中view视图的用法相当于浅拷贝。

arr = np.arange(5)drr = arr.view()print(arr is drr)drr[0] =5print(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] = 10print(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] = 15print(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] = 20print(crr,arr)

False

[20  1  2  3  4] [0 1 2 3 4]

以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!

(0)

相关推荐