numpy操作
一、numpy的意义
1.高效处理数据
# 列表
import time
t1 = time.time()
a = []
for i in range(100000000):
a.append(i**2)
t2 = time.time()
t =t2-t1
print(t)
# 14.413644313812256 #用列表用时14秒
import numpy as np
t3 = time.time()
b = np.arange(100000000)**2
t4 = time.time()
tt = t4-t3
print(tt)
1.4041173458099365 #使用numpy用时1秒
2.便捷的运算与多功能的函数,Numpy提供了向量化操作,可以在单个操作中处理整个数组,而不是逐个元素处理,大大提高了计算效率
3.广播机制,可以对形状不同的数组进行相互操作
4.内存优化Numpy的数组在内存中是连续存储的,这使得对数组的访问和操作非常高效。
5.多库兼容许多其他重要的数据科学和机器学习库都依赖于它(pandas、PyTorch、TensorFlow、scikit-learn、SciPy)
二、数组的维度概念
-一维数组,一维数组只有行
# 一维数组是没有嵌套的列表
[1,2,3,4,5,6]
-二维数组,二维数组既有行也有列
# 二维数组既有行也有列
[1,2],
[3,4],
[5,6]
-多维数组,三维数组
#多维度并不是意味着他有多少行或者是多少列,而是可以从几个方向上去看它
import numpy as np
np.array([[[1,2],[3,4]],
[[5,6],[7,8]],
[[9,10],[11,12]]])
三、数组创建
array转换效果
a = np.array([1,2,3,4,45,46,67,7])
print(a)
# [ 1 2 3 4 45 46 67 7]运行结果
print(a,type(a))
[ 1 2 3 4 45 46 67 7] <class 'numpy.ndarray'>
b = np.array(range(10))
print(b)
# [0 1 2 3 4 5 6 7 8 9]运行结果
print(b,type(b))
[0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'>
arange参数step
c = np.arange(1,9)
print(c)
print(c, type(c))
[1 2 3 4 5 6 7 8]
[1 2 3 4 5 6 7 8] <class 'numpy.ndarray'>
c1= np.arange(1,9,step=2)
print(c1)
[1 3 5 7]
c2= np.arange(9,1,step=-1)#步长为负表示取反
print(c2)
[9 8 7 6 5 4 3 2]
常用属性
ndim查看数组轴的个数
d = np.arange(10).reshape(5,2)
print(d)
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
print(d.ndim)
2 #二维数组
shape查看数组的形状
d = np.arange(10).reshape(5,2)
print(d)
print(d.ndim)
print(d.shape)
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
2
(5, 2) #表示5行2列
dtype描述数组中元素的数据类型
d = np.arange(10).reshape(5,2)
print(d.dtype)
int64 #int类型64位
size查看数组中元素的个数
d = np.arange(10).reshape(5,2)
10 #元素的个数
print(d.size)
常用方法
reshape方法用于改变数组的形状(shape),而不改变其数据。这意味着你可以将数组重新排列成不同的维度,只要新形状的总元素数量与原始数组的总元素数量相同。
一转多
import numpy as np
d = np.arange(20).reshape(4,5)
print(d)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
多转一
import numpy as np
d = np.arange(20).reshape(4,5)
print(d)
d1 = d.reshape(20)
print(d1)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
reshape不需要知道有多少个数,程序会自动帮我们计算转换,按顺序展开,只能讲多维数组展开成一维数组
import numpy as np
#三维数组
t = np.array([[[1,2],[3,4]],
[[5,6],[7,8]],
[[9,10],[11,12]]])
print(t)
[[[ 1 2]
[ 3 4]]
[[ 5 6]
[ 7 8]]
[[ 9 10]
[11 12]]]
print(t.shape)
(3, 2, 2)
#三维数组转一维数组
print(t.reshape(12))
[ 1 2 3 4 5 6 7 8 9 10 11 12]
t1 = t.reshape(12)
#一维数组转三维数组
print(t1.reshape(3, 2, 2))
[[[ 1 2]
[ 3 4]]
[[ 5 6]
[ 7 8]]
[[ 9 10]
[11 12]]]
print(t.flatten())
[ 1 2 3 4 5 6 7 8 9 10 11 12]
转置换轴:对上一步得到的二维数组进行转置。转置操作会交换数组的行和列,即原数组的第i行第j列元素会变成转置后数组的第j行第i列元素。
T:方法
import numpy as np
A = np.array([[1,2,3],
[4,5,6]])
print(A.shape)
(2, 3) #两行三列
A = np.array([[1,2,3],
[4,5,6]]).T #在结尾直接点T
print(A.shape)
(3, 2) #结果为三行两列
transpose:方法
B = A.transpose()
print(B.transpose())
[[1 4]
[2 5]
[3 6]]
swapaxes(1,0)
import numpy as np
A = np.array([[1,2,3],
[4,5,6]])
B = A.transpose()
print(B.transpose())
[[1 4]
[2 5]
[3 6]]
w = B.swapaxes(1,0)
print(w)
[[1 2 3]
[4 5 6]]
四、特殊数组的方法
ones
-用来创建特殊数组,它可以创建全部都为1的数组
-用法:np.ones(shape,dtype=None,order='C')
-shape:整数或者整型元组定义返回数组的形状;可以是一个数(创建一维向量),也可以是一个元组(创建多维向量)
eg: (3) 这就是一维。 (3,4)这就是3行4列的二维数组
-shape:整数或者整型元组定义返回数组的形状;可以是一个数(创建一维向量),也可以是一个元组(创建多维向量)
-eg: (3) 这就是一维。 (3,4)这就是3行4列的二维数组
-order(内存布局): 这是一个较不常用的可选参数,用于指定数组在内存中的存储顺序。它可以是 'C'(行优先,即 C 风格)或 'F'(列优先,即 Fortran 风格)。
ones_like
-创建形状相同的数组
-np.ones_like(a,dtype=float, order="c", subok=True)
-a:参考对象
-subok: 这是一个可选参数,默认为 False。一般用于带有掩码的数据
full
-full创建指定值的数组
-np.full(shape,fill_value,dtype=None,order='C')
-shape:整数或者整型元组定义返回数组的形状;可以是一个数(创建一维向量),也可以是一个元组(创建多维向量)
-fill_value:标量(就是纯数值变量)
full_like
-方法用于创建一个与给定数组形状(shape)和数据类型(dtype)相同的新数组。并用指定的填充值(fill_value)填充这个新数组。
-这个方法非常有用,当你需要创建一个与现有数组形状和类型一致但所有元素值都相同的新数组时。
-np.full_like(a,fill_value=123,dtype=None)