numpy基础数据结构
numpy数组是一个多维数组对象,称为ndarray。其由两部分组成:
- 实际的数据
- 描述这些数据的元数据
多维数组ndarray
import numpy as np
ar = np.array([1,2,3,4,5,6,7])
print(ar) # 输出数组,注意数组的格式:中括号,元素之间没有逗号(和列表区分)
print(ar.ndim) # 输出数组维度的个数(轴数),或者说“秩”,维度的数量也称rank
print(ar.shape) # 数组的维度,对于n行m列的数组,shape为(n,m)
print(ar.size) # 数组的元素总数,对于n行m列的数组,元素总数为n*m
print(ar.dtype) # 数组中元素的类型,类似type()(注意了,type()是函数,.dtype是方法)
print(ar.itemsize) # 数组中每个元素的字节大小,int32l类型字节为4,float64的字节为8
print(ar.data) # 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
ar # 交互方式下输出,会有array(数组)
#数组的基本属性
#① 数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推
#② 在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量:
#比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组
#所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。
#而轴的数量——秩,就是数组的维数。
[1 2 3 4 5 6 7]
1
(7,)
7
int32
4
<memory at 0x0000027EA4F80F48>
创建数组:
- array() 括号内可以是列表、元祖、数组、生成器等
- arange() 类似range(),在给定间隔内返回均匀间隔的值。可以
.reshape(n,m)
,
指定步长 - linspace() 返回在间隔[开始,停止]上计算的num个均匀间隔的样本 所以函数都注意dtype,指定个数
- zeros()/zeros_like()/ones()/ones_like() 0矩阵 1矩阵
- eye() 单位矩阵
array() 函数,括号内可以是列表、元祖、数组、生成器等
ar1 = np.array(range(10)) # 整型
ar2 = np.array([1,2,3.14,4,5]) # 浮点型
ar3 = np.array([[1,2,3],('a','b','c')]) # 二维数组:嵌套序列(列表,元祖均可)
ar4 = np.array([[1,2,3],('a','b','c','d')]) # 注意嵌套序列数量不一会怎么样
print(ar1,type(ar1),ar1.dtype)
print(ar2,type(ar2),ar2.dtype)
print(ar3,ar3.shape,ar3.ndim,ar3.size) # 二维数组,共6个元素
print(ar4,ar4.shape,ar4.ndim,ar4.size) # 一维数组,共2个元素
[0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'> int32
[1. 2. 3.14 4. 5. ] <class 'numpy.ndarray'> float64
[['1' '2' '3']
['a' 'b' 'c']] (2, 3) 2 6
[list([1, 2, 3]) ('a', 'b', 'c', 'd')] (2,) 1 2
arange(),类似range(),在给定间隔内返回均匀间隔的值。
print(np.arange(10)) # 返回0-9,整型
print(np.arange(10.0)) # 返回0.0-9.0,浮点型
print(np.arange(5,12)) # 返回5-11
print(np.arange(5.0,12,2)) # 返回5.0-12.0,步长为2
print(np.arange(10000)) # 如果数组太大而无法打印,NumPy会自动跳过数组的中心部分,并只打印边角:
[0 1 2 3 4 5 6 7 8 9]
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
[ 5 6 7 8 9 10 11]
[ 5. 7. 9. 11.]
[ 0 1 2 ... 9997 9998 9999]
linspace():返回在间隔[开始,停止]上计算的num个均匀间隔的样本。
ar1 = np.linspace(2.0, 3.0, num=5)
ar2 = np.linspace(2.0, 3.0, num=5, endpoint=False)
ar3 = np.linspace(2.0, 3.0, num=5, retstep=True)
print(ar1,type(ar1))
print(ar2)
print(ar3,type(ar3))
#numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) dtype很重要
#start:起始值,stop:结束值
#num:生成样本数&#x