Python数据分析——Numpy1 数组创建

numpy 提供了一个名为 ndarray 的多维数组对象,该数组元素具有固定大小 ,即 numpy 只能存放同一种数据类型的对象,因此能够确定存储数组所需空间的大小,能够运用向量化运算来处理整个数组,具有较高的运算效率。
NumPy提供了两种基本的对象:
ndarray (N-dimensional array object)和ufunc(universal function object)
ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

1.基于List创建ndarray

np.array(lst1, dtype='int32' ) # dtype=int
import numpy as np # 导入numpy库,取别名为np
lst1 = [1,2,3,4,5,6] # 定义一个列表
a1=np.array(lst1) # 创建一维数组
print('a1=',a1) # 打印一维数组
lst2 = [[1,2,3],[4,5,6]] # 定义一个嵌套列表
a2 = np.array(lst2) # 创建二维数组
print('a2=\n',a2) # 打印二维数组

2.基于元组创建

import numpy as np # 导入numpy库,取别名为np
a=(1,2,3)
print(np.array(a))

[1 2 3]

3.基于迭代器创建

print(np.array(range(5)))

[0 1 2 3 4]


若想将数组元素转换数据类型,可以使用astype()函数。
. astype方法会创建一个新的数组,并不会改变原有数组的数据类型。

·将浮点数转换为整数时元素的小数部分被截断,而不是四舍五入。
·数值型的字符串可以通过astype方法将其转换为数值类型,但如果字符串中有非数值型字符进行转换就会报错。

 


通过函数创建特殊数组

1.ones(shape, dtype=float, order='C') 创建全一数组

a = np.ones(4)
print('a=\n', a)

a=
 [1. 1. 1. 1.]

2.创建全0数组 zeros(shape,dtype=float,order = 'C')

a = np.zeros((3,5))
print('a=\n', a)

a=
 [[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

3.创建对角为1的矩阵 eye(N,M=None, k=0, dtype=float)

4.创建单位矩阵 identity(n, dtype=float)

 

5.创建对角为指定值的矩阵或获得二维数组的对角线 diag(v,k=0)


从数值范围创建数组 arange、linspace和logspace函数
(1)arange函数【左闭右开】
函数arange根据start与stop指定的范围以及step设定的步长,生成一个 一维数 ,函数格式如下所示:
numpy.arange(start=0, stop, step=1, dtype=None)
如果没有提供 dtype ,则会 使用 start stop 中较高级别类型
a1 = np.arange(10)
print('a1=', a1)
a2 = np.arange(0.,10, 2) #0.和10中较高级别的类型是float
print('a2=', a2)
a3 = np.arange(0, 10, 2, dtype='float') 
print('a3=', a3)

a1= [0 1 2 3 4 5 6 7 8 9]
a2= [0. 2. 4. 6. 8.]
a3= [0. 2. 4. 6. 8.]

(2)linspace
linspace 函数用于创建一个 一维数组 ,数组是一个 等差数列 构成的,其格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
a1= np.linspace(1,10,5)
print('a1=', a1)
a2 = np.linspace(1,10, 5, retstep=True) # 返回值包含公差
print('a2=', a2)

a1= [ 1.    3.25  5.5   7.75 10.  ]
a2= (array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ]), 2.25)

(3)logspace函数
创建开始点为start,结束点为end的,以base为底的幂组成的,num个数的 等比数
,其格式如下所示:
np.logspace(start, stop, num=50, endpoint=True, base=10.0 , dtype=None)

读取文件创建数组

在NumPy 中,loadtxt()和savetxt()函数可以对文件后缀名为.txt和.cSv的文件进行读写操作。
默认采用空白作为分隔符,将文件中的内容读取进来,并生成矩阵,要求每行的内容数目必须一致,也就是说不能有缺失值。

skiprows=n:指跳过前n行
 
a = np. loadtxt("/URL.txt", skiprows=1, dtype=int)
print ( a)

comment='#︰如果行的开头为#就会跳过该行
delimiter:数据之间的分隔符。如使用逗号","

a = np. loadtxt("/URL.txt", comments='#',delimiter=',')

数组基本属性

import numpy as np
a = np.array( [ [0,1,2,3], [4,5,6,7], [8,9,10,11] ] )
print("a=\n",a)
print("a.ndim=", a.ndim)
print("a.shape=", a.shape)
print("a.size=", a.size)
print("a.dtype=", a.dtype)
print("a.itemsize=", a.itemsize)
print("a.nbytes=", a.nbytes)

a=
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
a.ndim= 2
a.shape= (3, 4)
a.size= 12
a.dtype= int32
a.itemsize= 4
a.nbytes= 48


随机数

(1)rand函数
产生一个给定形状的数组,数组中的值服从 [0, 1)之间的均匀分布 ,其格式如下:
numpy.random.rand(d0, d1, ..., dn)
参数d0, d1, ..., dn表示每一维的长度(size),为int型,可选。
若没有参数则返回 一个符合均匀分布的float型随机数
(2)uniform函数
函数uniform返回一个在区间 [low, high)中均匀分布 的数组,其格式如下:
uniform(low=0.0, high=1.0, size=None)
参数low, high是float型,low的默认值为0.0,high的默认值为1.0;
size指定array的形状, 是int型数值 (一维数组长度)或 int型元组 (多维数
组形状),不指定该参数则返回 一个 服从均匀分布的 随机数

 

(5)randint函数
函数randint生成一个在区间[low, high)中 离散均匀分布 的整数数组,格式如下:
numpy.random.randint(low, high=None, size=None, dtype='l')
low, high:int型,指定抽样区间[low, high), 如果没有写参数high的值,则
指定抽样区间为[0,low)。
size:int型或int型的元组,指定形状。
dypte:可选参数,指定 整数数据类型 ,比如int、int64(i8)等。
返回值:如果指定了size,则返回一个int型的ndarray对象,否则返回一个服
从该分布的int型随机数。

 

 

shuffle函数
对numpy的数组进行 原地 重新随机排序,如果是多维数组,沿最小维进行随机排序,返回值为None。
numpy. random. shuffle( x )
shuffle permutation 都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序)。
区别在于 shuffle 直接在原来的数组上进行操作,改变原来数组的顺序,无返回值;
permutation 不直接在原来的数组上进行操作,而是返回一个新的打乱顺序的数组,并不改变原来的数组。
此外,shuffle不能传入int参数。
permutation函数
随机排列一个序列,或者数组。
numpy.random.permutation(x)
如果x是整数,则随机排列 np.arange(x)
如果x是一维数组或序列,对其 复制 之后再打乱其元素。
如果x是多维数组,则 沿最小维索引 随机排列数组。
  • 43
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值