目录
1.创建ndarray
numpy.array(object,dtype = None,copy = True,order = None,subok = False,ndmin = 0)
主要参数:
object:数组或嵌套的数列
dtype:数组元素的数据类型,可选
order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)。
ndmin:指定所生成数组应具有的最小维度。
#创建一维数组
a = np.array([1,2,3])
print(a)
#创建二维数组
b = np.array([[1,2,3],[4,5,6]])
print(b)
#使用ndmin参数设置数组的最小维度
c = np.array([1,2,3,4,5,6],ndmin=2)
print(c)
#改变数组维度
c.shape = 3,2 #将一维数组改成三行二列的二维数组
print(c)
#使用dtype参数设置数组类型为复数
x = np.array([1,2,3],dtype = complex)
print(x)
2.Numpy数据类型的使用
#NumPy数据类型的使用
import numpy as np
x = np.float32(5)
print('x为:',x)
print('x对象的data属性:',x.data)
print('x对象的size属性:',x.size)
print('x对象的维数:',x.ndim)
y= np.bool_(x)
print('转化为bool类型的x为:',y)
z = np.float16(y)
print('True值转化为float16类型为:',z)
输出结果:
3.数据类型对象(dtype)
numpy.dtype(object,align,copy)
主要参数:
object:要转换为dtype对象的数据对象。
align:如果为True,则填充字段使其类似C的结构体。
copy:指明是否复制dtype对象。
#使用dtype对象设置数据类型
import numpy as np
x = np.array(5,dtype='float32')
print('x为:',x)
print('x对象的data属性:',x.data)
print('x对象的size属性',x.size)
print('x对象的维数:',x.ndim)
y = np.array(x,dtype='bool_')
print('转化为bool类型的x为:',y)
z = np.array(y,dtype="float16")
print('True值转化为float16类型为:',z)
输出结果:
4.使用astype()修改数据类型
array.astype(dtype,order='K',casting='unsafe',subok=True,copy=True)
列如,将y设置成float32类型,可以用:
y = y.astype("float32") 或者 y = y.astype(np.float32)
#使用astype转化DataFrame
import pandas as pd
df = pd.DataFrame([{'qty':'3','num':'50'},{'qty':'7','num':'20'}])
print(df)
print(df.dtypes)
print('==========转化后=====================')
df['qty'] = df['qty'].astype('int')
df['num'] = df['num'].astype('float64')
print(df.dtypes)
输出结果:
5.Numpy数组属性
轴(Axis):每个线性数组称为一个轴,轴即数组的维度。 秩(Rank):秩描述NumPy数组的维数,即轴的数量。
axis = 0代表按第0轴方向操作,即对每列进行操作
axis = 1表示按第1轴方向操作,即对每行进行操作
#使用axis参数设置当前轴。
import numpy as np
arr = np.array([[0,1,2],[3,4,5]])
print(arr)
print('按列求和',arr.sum(axis=0))
print('按行求和',arr.sum(axis=1))
输出结果:
6.常见的ndarray数组属性
ndarray.ndim 秩,轴的数量
ndarray.shape 数组的维度
ndarray.size 数组元素的总个数
ndarray.dtype 数组元素类型
ndarray.itemsize每个元素的大小(B)
ndarray.data 实际数组元素
#例3.9 使用reshape()函数调整数组形状
import numpy as np
arr = np.array([0,1,2,3,4,5,6,7])
#显示数组arr的rank
print('arr的秩为:',arr.ndim)
arr3D = arr.reshape(2,2,2) #Rank为3,每个轴里的元素为2个
print(arr3D)
print('秩为:',arr3D.ndim)
输出结果:
#显示数组的维度
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a.shape)
#调整数组大小
import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.shape = (3,2)
print(a)
#创建dtype数据类型对象
myArr = np.array([1,2,3],dtype = np.float64)
myArr.dtype
7.其他数组的创建方式
1.numpy.empty() 创建一个指定形状、数据类型的空数组。这个数组没有经过初始化,其内容为空。
格式: numpy.empyt(shape,dtype = float,order = "C")
参数:
shape: 数组形状
dtype: 数组类型
order: 有‘C’和‘F’两个选项,分别代表行优先和列优先,表示在计算机内存中存储元素的顺序
2.numpy.zeros() 创建全零填充的数组
格式:numpy.zeros(shape,dtype = float,order = 'C')
3.numpy.ones() 创建全1填充的数组
格式:numpy.ones(shape,dtype=None,order='C')
#创建一个空数组
import numpy as np
x = np.empty([3,2],dtype=int)
print(x)
#运行后得到的数组元素值是不确定的,因为所用空间为初始化。
输出结果:
#创建一个全零数组
import numpy as np
#默认为浮点数
x = np.zeros(5)
print(x)
#设置类型为整数
print('================设置类型为整数=======================')
y = np.zeros((5),dtype=int)
print(y)
#自定义类型
print('================自定义类型======================')
z = np.zeros((2,2),dtype = [('x','i4'),('y','i4')])
print(z)
输出结果:
#建立一个全1数组
import numpy as np
x = np.ones(5)
print(x)
#自定义类型
y = np.ones([3,3,3],dtype = int)
print(y)
输出结果:
8.产生数列的函数
1)range()
2)aranage()
格式:range(start,stop[,step,],dtype=None)
3)linspace()
格式:numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
#生成3~9的步长为0.2的数组
import numpy as np
arr2 = np.arange(3,9,0.2)
arr2
# 生成1~5中的10个数
import numpy as np
x = np.linspace(1,5,num=10)
print(x)
9.使用随机函数创建数组
常用的Numpy随机函数:
#创建随机数组
import numpy as np
#生成2行3列的随机浮点数组
a = np.random.rand(2,3)
#生成2行2列的10以内的随机整数数组
b = np.random.randint(0,10,(2,2))
#生成2行3列的[1,2)的随机浮点数组
c = np.random.uniform(1,2,(2,3))
print("生成2行3列的随机浮点数组:",a)
print("生成2行2列的10以内的随机整数数组:",b)
print("生成2行3列的[1,2)的随机浮点数组:",c)
10.数组的花式切片
a.给定数组[1,2,3,4,5],如何得到在这个数组的每个元素之间插入3个0后的新数值?
#给定数组[1,2,3,4,5],如何得到在这个数组的每个元素之间插入3个0后的新数值?
a = np.arange(1,6,dtype = int)
print(a)
b = np.zeros(17,dtype = int)
print(b)
b[::4] = a
print(b)
b.打印出以下函数(要求使用np.zeros创建8*8的矩阵)
#打印出以下函数(要求使用np.zeros创建8*8的矩阵)
x = np.zeros((8,8),dtype = int)
x[::2,1:4:2] = 1
x[1:8:2,::2] = 1
print(x)
c.用arange()创建一个3行5列的二维数组,完成下列操作
(1)索引第0行中第3列和第4列的元素 输出它
(2)索引第2行和第三行中第3列,第4列和第5列的元素 输出它
#创建数组并输出
x = np.arange(1,16).reshape(3,5)
print(x)
#索引第0行中第3列和第4列的元素 输出它
y = x[0,2:4]
print(y)
#索引第2行和第三行中第3列,第4列和第5列的元素并输出它
z = x[1:3,2:5]
print(z)
输出结果: