#!/usr/bin/env python # coding: utf-8 #

Table of Contents

#
# In[1]: import numpy as np # In[2]: #全部行都能输出 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all" # # ndarray对象的属性 # In[3]: #为了确保大家都能生成一样的数组, 我们先设置随机数种子 np.random.seed(123) x1 = np.random.randint(1,10, size=6) # 一维数组 x2 = np.random.randint(1,10, size=(3, 4)) # 二维数组 x3 = np.random.randint(1,10, size=(3, 4, 5)) # 三维数组 # In[4]: x1 x2 x3 # ## 数组的形状ndarray.shape # In[5]: #查看数据的形状 x1.shape x2.shape x3.shape # ## 数组的维度ndarray.ndim # In[6]: x1.ndim x2.ndim x3.ndim # ## 查看数组中的元素个数ndarray.size # In[7]: x1.size x2.size x3.size # ## 查看数组中的元素的数据类型ndarray.dtype # In[8]: x1.dtype x2.dtype x3.dtype # ## 查看数组中每个元素所占的内存字节数ndarray.itemsize # In[9]: x1.itemsize x2.itemsize x3.itemsize # In[10]: # 数组的 dtype 为 int8(一个字节) x = np.array([1,2,3,4,5], dtype = np.int8) x.itemsize # In[11]: x = np.array([1,2,3,4,5], dtype = np.float64) x.itemsize # # ndarray对象的方法一维度变换 # In[12]: m = np.random.randint(1, 100,(2, 3, 4)) m # ## 改变数组的形状ndarray.reshape(不改变原数组) # In[17]: m.reshape(3,8) #不改变原数组,会返回新的数组 # In[18]: m.shape # In[19]: m.reshape(3,7) #注意这点,要保证reshape前后数组中的元素是一样的 # ## 改变数组的形状ndarray.resize(改变原数组) # In[20]: m = np.random.randint(1, 100,(2, 3, 4)) m # In[21]: m.resize(4,6) #改变原数组 # In[22]: m # In[23]: m.shape # In[27]: m.shape # ## 返回一个一维数组 # ### ndarray.flatten # In[39]: m = np.random.randint(1, 100,(2, 3, 4)) m # In[40]: n = m.flatten() #不改变原数组 n # In[ ]: # ### np.ravel() # In[42]: m # In[43]: m.ravel() # In[ ]: # In[38]: m # ### 通过reshape改变形状 # In[46]: m.reshape(1,-1) # In[47]: m.reshape(-1,1) # 这种改变的就是原数组的形状而已 # In[ ]: # # ndarray对象的方法—数组转列表ndarray.tolist # 有时候我们需要把把数组转化为列表来处理数据,因为列表有很多方法 # 之前我们有学过ndarray.astype()用来修改数组元素的数据类型 # 也知道怎么把列表 元组变成数组,反过来我再学一个怎么把ndarray变成列表 # In[58]: a = np.array([1, 2, 3, 4, 5, 6, 7, 8]) #列表变数组 a # In[57]: b = a.tolist() #不会改变原数组,重新返回一个新生成的列表 b # In[53]: a # # ndarray的索引与切片 # **和字符串 列表 元祖基本上是一样的** # [开始位置, 终止位置, 步长和方向] # ## 一维ndarray的索引与切片 # In[13]: a = np.arange(5,16) a # **索引单个元素** # In[14]: a[1] # In[15]: a[-1] # In[16]: a[-2] # **多个元素的连续索引** # In[17]: a[0:3] # In[18]: a[3:8] # In[19]: a[5:] # In[20]: a[5:-1] # **间隔索引** # In[21]: a # In[22]: a[0:6:2] # In[23]: a[0::4] # In[24]: a[::-2] # ## 多维ndarray的索引与切片 # In[25]: a = np.array([[1, 2, 3], [4, 5, 6,], [7, 8, 9]]) a # In[26]: a[0] # In[27]: a[0:2] # In[28]: a[0][1] # In[29]: a[2][:] # In[30]: a # In[31]: a[0:2,0] #[行,列] # In[32]: a[:,:] # In[33]: a[:,1] # In[34]: a[1]==a[1,:] # In[ ]: # In[ ]: # ## 布尔索引 # 当结果对象是布尔运算(例如比较运算符)的结果时,将使用此类型的高级索引。 # In[35]: x = np.arange(12).reshape(4,3) x # In[36]: x>5 # In[37]: x[x>5] # In[38]: a = np.array([np.nan,1,2,np.nan,3,4,5]) a # In[39]: np.isnan(a) # In[40]: a[np.isnan(a)] # In[ ]: # In[ ]: