数据处理基础:Numpy基础(1)

Numpy基础使用


本章及后面更新的Numpy博客,我都使用标准的Numpy导入方式import numpy as np
当然你也可以在代码中写from numpy import *来省略多写的一个np。但是我还是建议你用标准导入方式,因为numpy这个命名空间包含了大量与Python内建函数重名的函数(就像 minmax)

Numpy ndarray: 多维数组对象

生成随机数组
# 生成随机数组
data=np.random.randn(2,3)
print(data,"\n")

# 给data一个数学操作

print(data*10,"\n")# 将里面数值扩大10倍
print(data+data,"\n")#相加了

# 一个ndarray是一个通用的多维同类数据容器,每个数组有一个shape属性,用来表证数组每一维度的数量,每个数组都有一个dtype属性
print(data.shape)#(2, 3)
print(data.dtype)#float64
生成ndarray
# 生成ndarray
data1=[6,5,8,4,5,6,1]
arr1=np.array(data1)
print(arr1)

# 嵌套序列
data2=[[1,2,3,4],[5,6,7,8]]
arr2=np.array(data2)
print(arr2)
# 因为data2是一个包括列表的列表,所以numpy数组arr2形成了二维数组,可以通过ndim和shape属性来确定
print(arr2.ndim)
# out
'''
2
(2, 4)
'''
print(arr2.shape)
数组生成

# 除了np.array还有很多其他函数可以创建新数组
New_Numpy_List=np.zeros(10)
print(New_Numpy_List)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
print(np.zeros((3,6)))
# [[0. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 0. 0.]]


# 使用empty来生成一个全0的数组不安全,他可能会生成一堆垃圾数据
print(np.empty((2,3,2)))

# arange
print(np.arange(15))
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

# eye,identity可以生成N*N的矩阵 对角线是1
print(np.eye(4,4))
print(np.identity(4))
Numpy数据类型
类型类型代码描述
int8,uint8il,ul有符号和无符号的8数位整数
int41,unint16i2,u2有符号和无符号的32数位整数
int32,unint32i4,u4有符号和无符号的32数位整数
int64,unint64i8,u8有符号和无符号的64数位整数
float16f2半精度浮点数
float32f4或f标准单精度浮点数;兼容C语言float
float64f8或d标准双精度浮点数;兼容C语言double和
python float
float128f16或g拓展精度浮点数
complex64c8,c16,c32分别基于32位、64位、128位浮点数的复数
complex128
complex256
bool?布尔值,存储True或False
objectoPython object类型
string_S修正的ASCLL字符串类型;例如生成一个长度
为10的字符串类型,使用‘S10’
unicode_U修正的Unicode类型;生成一个长度
为10的Unicode类型,使用‘U10’
数组类型转换
显式转换
arr5=np.array([1,2,3,4,5])
print(arr5.dtype)
# int32
float_arr=arr5.astype(np.float64)
print(float_arr.dtype)

# float64

在上面例子中,整数被转换成了浮点数。如果我把浮点数转换为整数,则小数点后的部分都将被消除:

arr=np.array([3.7,-1.2,-2.6,0.5,12.9,10.1])
print(arr)
arr.astype(np,int32)
print(arr)

如果你有一个数组,里面的元素都是表达数字含义的字符串,也可以通过astype将字符串转换为数字:

numeric_strings=np.array(['1.25','9.6','42'],dtype=np.sting_)
print(numeric_strings.astype(float))

在Numpy中,当使用numpy.string_类型作字符串数据时要小心,因为Numpy会修正它的大小或删除输入且不发出警告。pandas在处理非数值数据时有更直观的开箱型操作。

如果因为某些原因导致转换类型是失败(比如字符串无法转换为float64位时),将会抛出一个ValueError。这里我偷懒地使用float来代替np.float64,是因为Numpy可以使用相同别名来表征与python精度相同的Python数据类型。

你也可以使用另一个数组的dtype属性:

int_array=np.arange(10)
calibers=np.array([.22,.270,.357,.380,.44,.50],dtype=np.float64)
print(int_array.astype(calibers.dtype))

也可以使用类型代码来传入数据类型:

empty_uint32=np.empty(8,dtype='u4')
print(empty_uint32)
#[         0 1072693248          0 1072693248          0 1072693248
#          0 1072693248]

Numpy 数组算术

数组之所以重要是因为它允许你进行批量操作而无须任何for循环。numpy用户称这种特性为向量化。任何在两个等尺寸数组之间的算术操作都应用了逐元素操作的方式:

arr=np.array([[1.,2.,3.],[4.,5.,6.]])
print(arr)
[[1. 2. 3.],
   [4. 5. 6.]]

print(arr*arr)
[[ 1.  4.  9.],
 [16. 25. 36.]]

print(arr-arr)
[[0. 0. 0.],
[0. 0. 0.]]

带有标量计算的算术操作,会把计算参数传递给数组的每一个元素:

print(1/arr)
print(arr**0.5)

同尺寸数组之间比较,会产生一个布尔值数组:

arr2=np.array([[0.,4.,1.],[7.,2.,12.]])
print(arr2)

print(arr2>arr)
#out
[[False  True False]
 [ True False  True]]

博主后续会持续更新Python,GO

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值