给 iOS 开发者的 python 学习日记十二

写在前面

我们在昨天的学习笔记讨论了 Python 基本变数类型与资料结构可以应用的属性或方法,除了基本的资料结构以外,你是否还记得 Python 可以透过引入 numpy 套件之后使用 ndarray 资料结构呢?当时我们为了解决 Python 的 list 资料结构无法进行 element-wise 的运算,因此使用了 numpy 套件的 ndarray,我们势必要了解她常见的属性或方法。

numpy 与 ndarray 的常用属性或方法

了解 ndarray 的概观

ndim 属性

shape 属性

dtype 属性

import numpy as np

ironmen = [56, 8, 19, 14, 6, 71]

ironmen_array = np.array(ironmen)

print(ironmen_array.ndim) # number of dimensions

print(ironmen_array.shape) # m*n

print(ironmen_array.dtype) # 資料類型

print("\n") # 空一行

# 2d array

ironmen_2d = [range(1, 7), [56, 8, 19, 14, 6, 71]]

ironmen_2d_array = np.array(ironmen_2d)

print(ironmen_2d_array.ndim) # number of dimensions

print(ironmen_2d_array.shape) # m*n

print(ironmen_2d_array.dtype) # 資料類型

建立 ndarray

numpy 套件除了 array() 方法可以将 list 转换成 ndarray,还有其他的方法可以建立 ndarray。

zeros() 方法

empty() 方法

arange() 方法

import numpy as np

print(np.zeros(6)) # 六個元素均為零的 1d array

print("------") # 分隔線

print(np.zeros((2, 6))) # 十二個元素均為零的 2d array

print("------") # 分隔線

print(np.empty((2, 6, 2))) # 二十四個元素均為未初始化的值

print("------") # 分隔線

print(np.arange(11)) # 十一個元素為 0 到 10 的 1d array

转换变数类型

ndarray 的 astype() 方法可以转换变数类型。

import numpy as np

ironmen = ["56", "8", "19", "14", "6", "71"]

ironmen_str_array = np.array(ironmen)

print(ironmen_str_array.dtype)

print("---") # 分隔線

# 轉換為 int64

ironmen_int_array = ironmen_str_array.astype(np.int64)

print(ironmen_int_array.dtype)

用索引值进行筛选

利用 [] 搭配索引值筛选 ndarray

import numpy as np

my_array = np.arange(10)

print(my_array[0])

print(my_array[0:5])

print("---") # 分隔線

my_2d_array = np.array([np.arange(0, 5), np.arange(5, 10)])

print(my_2d_array)

print("---") # 分隔線

print(my_2d_array[1, :]) # 第二列

print(my_2d_array[:, 1]) # 第二欄

print(my_2d_array[1, 1]) # 第二列第二欄的元素

用布尔值进行筛选

利用布林值(bool)筛选 ndarray

import numpy as np

ironmen = [56, 8, 19, 14, 6, 71]

groups = ["Modern Web", "DevOps", "Cloud", "Big Data", "Security", "自我挑戰組"]

ironmen_array = np.array(ironmen)

groups_array = np.array(groups)

# 用人數去篩選組別

print(ironmen_array >= 10) # 布林值陣列

print(groups_array[ironmen_array >= 10]) # 大於 10 的組別

# 用組別去篩選人數

print(groups_array != "自我挑戰組") # 布林值陣列

print(ironmen_array[groups_array != "自我挑戰組"]) # 除了自我挑戰組以外的人數

2d array 转置

使用 T 属性。

import numpy as np

建立一個 2d array

my_1d_array = np.arange(10)

my_2d_array = my_1d_array.reshape((2, 5))

print(my_2d_array)

print("---") # 分隔線

print(my_2d_array.T)

numpy 的 where 方法

透过 numpy 的 where() 方法在 ndarray 中进行流程控制。

import numpy as np

ironmen_array = np.array([56, 8, 19, 14, 6, np.nan])

np.where(np.isnan(ironmen_array), 71, ironmen_array)

排序

透过sort()方法。

import numpy as np

ironmen_array = np.array([56, 8, 19, 14, 6, 71])

print(ironmen_array)

ironmen_array.sort()

print(ironmen_array)

随机变数

透过 numpy 的 random() 方法可以生成随机变数。

import numpy as np

print(normal_samples)

print("---") # 分隔線

print(uniform_samples)

小結

今天我们讨论了 numpy 套件与 ndarray 的属性或方法,包含建立,变数类型转换,筛选与排序等,这些属性与方法有的隶属于 numpy 套件,有的隶属于 ndarray 这个资料结构所建立的对象,对于熟悉面向对象的概念是很好的练习机会。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171218G0LJEP00?refer=cp_1026

扫码关注云+社区