一、python内置array模块
这个模块定义了一个对象类型,用以表示一些基础变量构成的列表,包括字符,整数,浮点数,Array是序列类型,使用起来与list十分接近,但是存储的变量类型只能是一种,所以方便高效的数值运算。
此模块定义了如下类型:
class array.array(typecode[, initializer])
import array
array.array('i',[1,2,3])
typecode限制了array的类型;initializer为可选项,用于初始化,这个参数必须是一个列表,一个类似于字节的对象,或者对适当类型的元素进行迭代的迭代器。
与numpy区别详细参考:https://blog.csdn.net/pipisorry/article/details/39215089
二、np.array
1.NumPy中的基本数据类型
| 名称 | 描述 |
|---|---|
| bool | 用一个字节存储的布尔类型(True或False) |
| inti | 由所在平台决定其大小的整数(一般为int32或int64) |
| int8 | 一个字节大小,-128 至 127 |
| int16 | 整数,-32768 至 32767 |
| int32 | 整数,-2 ** 31 至 2 ** 32 -1 |
| int64 | 整数,-2 ** 63 至 2 ** 63 - 1 |
| uint8 | 无符号整数,0 至 255 |
| uint16 | 无符号整数,0 至 65535 |
| uint32 | 无符号整数,0 至 2 ** 32 - 1 |
| uint64 | 无符号整数,0 至 2 ** 64 - 1 |
| float16 | 半精度浮点数:16位,正负号1位,指数5位,精度10位 |
| float32 | 单精度浮点数:32位,正负号1位,指数8位,精度23位 |
| float64或float | 双精度浮点数:64位,正负号1位,指数11位,精度52位 |
| complex64 | 复数,分别用两个32位浮点数表示实部和虚部 |
| complex128或complex | 复数,分别用两个64位浮点数表示实部和虚部 |
2.使用np.array方法将tuple和list, 或者其他的序列模式的数据转换为 ndarray(多维数组)。
>>>a = np.array([1,2,3,4]) # 参数是list, list是一种复合数据类型,
>>>b = np.array((5,6,7,8)) # 参数是tuple,不能二次赋值,相当于只读列表
>>>print(type(a)) # 返回矩阵 a 的数据类型
>>>print(type(b))
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
>>>print(a.dtype) # 返回 a 中元素的数据类型
>>>print(b.dtype)
<U11
int32
3.使用numpy中的函数np.array(),不同于list(list中保存的是数据存放的地址,比如list[1,2,3,‘a’] ),np.array中参数的数据类型必须全部相同。
np.array([[1,2,3,"a"],[4,'b',6,7]],(1,2,3,4)) # 报错
np.array([[1,2,3,"a"],[4,'b',6,7]],[1,2,3,4]) # 通过
1.创建
一般创建
import numpy as np
>>>a = np.array([[1,2,3]]) # 神经网络中,表示一维Matrix(行向量)
>>>print(a)
[[1 2 3]]
>>>b = np.array([[1,1,1],[2,2,2],[3,3,3]]) # 3×3 矩阵
>>>print(b)
[[1 1 1]
[2 2 2]
[3 3 3]]
>>>c = np.array([1,2,3],dtype = complex) # 区别于 a,这是一维array,dtype指定数组中元素的类型
>>>print(c)
[1.+0.j 2.+0.j 3.+0.j]
rand()和randn()
>>>d = np.random.randn(5,1) # randn返回具有标准正太分布(N(0,1))的样本,左开右闭
>>>print(d)
[[-0.35357824]
[ 1.00639613]
[-0.04536121]
[ 0.40522356]
[-0.09501711]]
>>>e = np.random.rand(5,1) # 随机样本[0,1)
>>>print(e)
[[0.68935775]
[0.20780517]
[0.02238914]
[0.31708669]
[0.45436972]]
>>>f = np.random.randn(5) # 神经网络构建时表示一维数组,区别于 d 矩阵(列向量)
>>>print(f)
[-1.03610009 -0.18660966 0.57321627 1.1973498 -0.52833346] 秩为1
特殊数组
np.ones: 创建一个数组, 其中的元素全为 1
np.zeros: 创建元素全为 0 的数组, 类似 np.ones
np.empty创建一个内容随机并且依赖与内存状态的数组。
np.eye: 创建一个对角线为 1 其他为 0 的矩阵.
np.identity: 创建一个主对角线为 1 其他为 0 的方阵.
**生成均匀分布的array:**
arange(最小值,最大值,步长)(左闭右开) : 等差数列
linspace(最小值,最大值,元素数量)
logspace(开始值, 终值, 元素个数): 等比数列
2.操作
shape函数:numpy中查看matrix的维数;size函数:查看元素个数
>>>a = np.eye(3) # eye(3),创建一个3×3单位矩阵
>>>print(a)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
>>>a.shape # 矩阵的维度
(3, 3)
>>>a.size # 元素个数
9
>>>c = np.array([[1,2],[3,4],['a','b'],['c','d']]) # 4×2矩阵
>>>print(c.shape[0]) # c.shape[0] 为第二维的长度 (纵轴)
>>>print(c.shape[1]) # c.shape[1] 为第一维的长度 (横轴) shape[3]为第三维长度,这
>>>print(c.shape[2]) # shape[3]为第三维长度,这里没有第三维,报错
4
2
>>>b = np.array([1,2,3,4]) # rank 1 array, 神经网络编程中别用
>>>b.shape # 4 表示array的长度**(特殊情况)**
(4,)
>>>b.size
4
reshape函数:给array一个新的形状,但不改变其数据
>>> c = arange(24).reshape(2,3,4)
>>> print c
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
3.运算
知识点: NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

4665

被折叠的 条评论
为什么被折叠?



