#!/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[ ]: