利用Python进行数据分析笔记-第4章 NumPy基础:数组和⽮量计算-4.1 NumPy的ndarray:⼀种多维数组对象

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

# # 第4章 NumPy基础:数组和⽮量计算
#
# # 4.1 NumPy的ndarray:⼀种多维数组对象

import numpy as np
data = np.random.randn(2, 3)
data


# In[2]:


data * 10


# In[3]:


data + data


# In[ ]:


# ndarray是⼀个通⽤的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。
# 每个数组都有⼀个shape(⼀个表示各维度⼤⼩的元组)
# 和⼀个dtype(⼀个⽤于说明数组数据类型的对象):


# In[5]:


data.shape


# In[6]:


data.dtype


# In[ ]:


# 虽然⼤多数数据分析⼯作不需要深⼊理解NumPy,但是精通⾯向数组的编程和思维⽅式是成为Python科学计算⽜⼈的⼀⼤关键步骤。
# 笔记:当你在本书中看到“数组”、“NumPy数组”、"ndarray"时,基本上都指的是同⼀样东⻄,即ndarray对象。


# In[13]:


# Python中random和np.random模块详解 https://zhuanlan.zhihu.com/p/474425448
# 创建整数类型数组 1到100 之间,2行3列数组
data2 = np.random.randint(1,100,size=(2,3))
data2


# In[14]:


# 创建数组最简单的办法就是使⽤array函数。它接受⼀切序列型的对象(包括其他数组),
# 然后产⽣⼀个新的含有传⼊数据的NumPy数组。以⼀个列表的转换为例:
list1 = [1,2,3,4,]
arr1 = np.array(list1)
arr1


# In[15]:


type(arr1)


# In[16]:


arr1.shape


# In[19]:


arr1.dtype


# In[22]:


# 除np.array之外,还有⼀些函数也可以新建数组。
# ⽐如,zeros和ones分别可以创建指定⻓度或形状的全0或全1数组。
# empty可以创建⼀个没有任何具体值的数组。
# 要⽤这些⽅法创建多维数组,只需传⼊⼀个表示形状的元组即可:
np.zeros(3)


# In[23]:


np.zeros((3, 6))


# In[26]:


# 注意:认为np.empty会返回全0数组的想法是不安全的。
# 很多情况下(如前所示),它返回的都是⼀些未初始化的垃圾值。

np.empty((2, 3))


# In[27]:


# arange是Python内置函数range的数组版:
np.arange(15)


# In[29]:


# 10 NumPy数组的运算
# 1数组很重要,因为它使你不⽤编写循环即可对数据执⾏批量运算。NumPy⽤户称其为⽮量化(vectorization)。
# ⼤⼩相等的数组之间的任何算术运算都会将运算应⽤到元素级:

arr = np.array([[1,2,3],[4,5,6]])
arr


# In[30]:


arr * arr


# In[31]:


arr - arr


# In[32]:


# 数组与标量的算术运算会将标量值传播到各个元素:
1 / arr


# In[34]:


# ⼤⼩相同的数组之间的⽐较会⽣成布尔值数组:
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
arr2 > arr


# In[36]:


# 11 基本的索引和切⽚
# NumPy数组的索引是⼀个内容丰富的主题,因为选取数据⼦集或单个元素的⽅式有很多。
# ⼀维数组很简单。从表⾯上看,它们跟Python列表的功能差不多:
arr = np.arange(10)
arr


# In[37]:


arr[1]


# In[40]:


arr[0:2]


# In[39]:
arr[5:8]


# In[41]:
arr


# In[ ]:

# 如上所示,当你将⼀个标量值赋值给⼀个切⽚时(如arr[5:8]=12),
# 该值会⾃动传播(也就说后⾯将会讲到的“⼴播”)到整个选区。
# 跟列表最重要的区别在于,数组切⽚是原始数组的视图。
# 这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。

 

# 补充2 在 NumPy 中,array 是一个多维数组对象,用于存储相同类型的数据。
# 创建ndarray
# 创建数组最简单的办法就是使⽤array函数。它接受⼀切序列型的对象(包括其他数组),
# 然后产⽣⼀个新的含有传⼊数据的NumPy数组。以⼀个列表的转换为例:
import numpy as np

# 创建一个一维数组
arr_1d = np.array([1, 2, 3])
print(arr_1d)

data1 = [6,7.5,8,0,1]
arr1 = np.array(data1)
print(data1)

# 创建一个二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
arr_2d.ndim # 查看维度
arr_2d.shape # 查看几行几列
arr_2d.dtype # 查看数据类型

[1 2 3]
[6, 7.5, 8, 0, 1]
Out[26]:
dtype('int32')

# 补充3 reshape
arr = np.arange(32).reshape(8,4)
arr

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31]])

# 补充4 数组转置和轴对换
# 转置是重塑的⼀种特殊形式,它返回的是源数据的视图(不会进⾏任何复制操作)。
# 数组不仅有transpose⽅法,还有⼀个特殊的T属性:
# reshape(3,5) 3行5列
arr = np.arange(15).reshape(3,5)
arr

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

# 转置成 5行3列
arr.T

array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])




posted on 2023-12-10 21:16  跃渊而出  阅读(18)  评论(0)    收藏  举报