3种不同的形式:
- 用list和tuple等数据结构表示数组
- 用array模块
- NumPy库 np.array
用列表定义数组,也可以用元组定义列表,元组是不可变的列表:
一维数组:list=[1,2,3,4]
二维数组:list=[[1,2,3],[4,5,6],[7,8,9]]
弊端:
- 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
#-------------用列表类型定义数组----------
#直接定义数组
matrix = [[1,2],[3,4]]
#for循环定义数组
matrix0 = [i for i in range(3) for j in range(4)]
#外循环为 i 内循环为 j。 即每次执行一次i循环,都要执行完j循环 3*4 一共12个值 一维数组
matrix1 = [[0 for i in range(3)] for j in range (4)]
#外循环为 j 内循环为 i。 即每次执行一次j循环,都要执行完i循环 二维数组
print(matrix0)
print(matrix1)
输出:
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
Numpy的诞生弥补了这些不足,Numpy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数
ndarray是Numpy中的基本数据结构,所有元素是同一种类型,优点:节省内存和提高CPU计算时间,有丰富的函数
数组的创建:
'''
author dandanhuang
Email [email protected]
2018-08-23
array函数创建:
创建一维数组:np.array([元素1,元素2,……])
创建二维数组:np.array ( [ [ 元素1,元素2……],[ 元素1,元素2,…… ],[ ],[ ] ] )
1.arange函数类似python中的range函数,通过指定初始值、终值以及步长(默认步长为1)来创建数组
2.linspace函数通过指定初始值、终值以及元素个数来创建一维数组
3.logspace函数与linspace类似,只不过它创建的是一个等比数列,同样的也是一个一维数组
4.函数ones创建一个全1的数组、
5.函数zeros创建一个全0的数组、
6.函数empty创建一个内容随机的数组,在默认情况下,用这些函数创建的数组的类型都是float64,若需要指定数据类型,只需要闲置dtype参数即可
7.fromstring函数从字符串中读取数据并创建数组
2.fromfunction函数由第一个参数作为计算每个数组元素的函数(函数对象或者lambda表达式均可),第二个参数为数组的形状
'''
import numpy as np
x1=np.arange(1,5,0.5)
x2=np.random.random((2,2))
x3=np.linspace(1,2,5,endpoint=False)
x4=np.ones([2,3])
x5=np.zeros((2,2))
s1 = "1,2,3,4,5"
x6=np.fromstring(s1, dtype=np.int64, sep=",")
x8=np.fromfunction(lambda i,j:(i+1)*(j+1),(9,9)) #匿名函数
x7=np.fromfunction(lambda i,j: i+j, (3,3), dtype = int)
print(x1,x2,x3,x4,x5,x6,x7,x8)
'''
import numpy as np
x1=np.arange(1,5,0.5)
x2=np.random.random((2,2))
x3=np.linspace(1,2,5,endpoint=False)
x4=np.ones([2,3])
x5=np.zeros((2,2))
x6=np.fromfunction(lamda i,j:(i+1)*(j+1),(9,9)) #匿名函数
输出:
[1. 1.5 2. 2.5 3. 3.5 4. 4.5]
[[0.4894656 0.31567792]
[0.16518892 0.48548549]]
[1. 1.2 1.4 1.6 1.8]
[[1. 1. 1.]
[1. 1. 1.]]
[[0. 0.]
[0. 0.]]
[1 2 3 4 5]
[[0 1 2]
[1 2 3]
[2 3 4]]
参考博客:
https://blog.csdn.net/scorpion_zs/article/details/52526310
https://www.cnblogs.com/Lee-yl/p/8625402.html