给 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 这个资料结构所建立的对象,对于熟悉面向对象的概念是很好的练习机会。

本文来自企鹅号 - 灯火学院媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MixLab科技+设计实验室

关于编程语言OC之9个基础知识点

这是《给自己的一份自学IOS开发的学习清单》中的《关于编程语言OC》读书笔记系列的第1篇。 入门务必记住这9点。 1、MAC操作系统上的整个开发环境成为Coco...

38280
来自专栏C语言及其他语言

[每日一题]破解密码(1244)

向往如图灵一样破解密码吗?那么就请开始你的表演 题目描述 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之...

44190
来自专栏CSDN技术头条

改变开发者编码思维的六种编程范式

译者注:本文介绍了六种编程范式,提到了不少小众语言,作者希望借此让大家更多的了解一些非主流的编程范式,进而改变对编程的看法。以下为译文: 时不时地,我会发现一些...

503100
来自专栏黑泽君的专栏

名词小解

----------------------------------------------------------------------------- py...

7400
来自专栏哈雷彗星撞地球

设计模式中的设计原则

翻了三本书《设计模式之禅》、《设计模式:可复用的面向对象软件元素》、《Head First 设计模式》,也看了不少博客和关于设计模式原则的文章。关于设计模式有几...

9430
来自专栏程序员互动联盟

Java最大的竞争对手是谁?

Java的不断发展要归功于C、C++ 和C# 等编程语言的不断挑战。C++、C#和Java等编程语言基本上都来源于C语言但又有很多区别。业内人士经常将C比作爷爷...

409110
来自专栏编程

Python萌新在九九乘法表中栽过的跟头

对于一个只听过一节python视频课的新手,写出九九乘法表毫无疑问是一件充满挑战的事情,所以写之前我在菜鸟教程中看了一些基础知识,看了点儿之后觉得不是特别难,于...

26080
来自专栏智能算法

一个程序员怎么才算精通python

我会先给出我对精通Python的理解,然后给出一些Python中有难度的知识点。如果大家在看完我这篇回答之前,已经充分理解了我列出的各个知识点,那么,我相信你...

61690
来自专栏陈树义

大白话说Java动态代理:一个面包店的动态代理帝国

代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位。代理模式从类型上来说,可以分为静...

34040
来自专栏跨界架构师

再谈开发中的代码规范

  随着公司的业务发展,项目越来越多,越来越大,复杂性也越来越高。查找一个BUG变得越发抓狂;新人熟悉一块代码也变得越发困难。有的时候顺手写下的一行充满坏味道的...

12740

扫码关注云+社区

领取腾讯云代金券