机器学习和数据分析-numpy.ndarray的基础操作
·
一:数组维度
1.启动jupyter notebook
2.创建一个新的notebook,我们将它命名为ndarray

3.导入numpy
import numpy as np
4.创建一个一维数组a,使用a.ndim查看数组维度
a = np.arange(10)
a
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.ndim
#结果:1 (代表数组a是一维的)
运行效果图如下:

5.a.shape和a. size查看数组元素的个数

6.创建一个二维数组 A = np.ones(shape=(3,5))
#1.创建一个数值全部为1的二维数组A
A = np.ones(shape=(3,5))
A
#结果:array([[1., 1., 1., 1., 1.],
# [1., 1., 1., 1., 1.],
# [1., 1., 1., 1., 1.]])
#2.查看数组维度
A.ndim
结果:2
#3.查看数组shape值
A.shape
#结果:(3, 5)
#4.查看数组元素个数
A.size
#结果:15
运行效果图如下:

7.手动输入一个二维数组
#1.手动输入一个二维数组
X = np.array([[1,2,3],
[4,5,6]])
X
#结果:array([[1, 2, 3],
# [4, 5, 6]])
#2.查看数组X的shape值
X.shape
结果:(2, 3)
运行结果图如下:

8.输入一个数组a,第一行元素和第二行元素个数不等
#1.手动输入一个数组a,且每行个数不一致
a = np.array([[1,2,3],
[4,5]])
a
#结果:array([list([1, 2, 3]), list([4, 5])], dtype=object)
#2.查看a的维度
a.ndim
#结果: 1
#3.查看a的shape值
a.shape
#结果:(2,)
#4.查看a的元素个数
a.size
#结果:2
运行效果图如下:

9.reshape改变数组a的维度,但是a本身还是一维数组
#1.创建一个一维数组a
a = np.arange(10)
a
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#2.改变a的维度
a.reshape(2,5)
#结果:array([[0, 1, 2, 3, 4],
# [5, 6, 7, 8, 9]])
#3.再次查看a本身的值
a
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
运行效果图如下:

a.reshape(2,-1)两行,自动计算列数;a.reshape(-1,2) 两列,自动计算行数
#1.指定行数,自动计算列数
a.reshape(2,-1)
#结果:array([[0, 1, 2, 3, 4],
# [5, 6, 7, 8, 9]])
#2.指定列数,自动计算行数
a.reshape(-1,2)
#结果:array([[0, 1],
# [2, 3],
# [4, 5],
# [6, 7],
# [8, 9]])
运行效果图如下:

10个元素,写成a.reshap(-1,3),则会报错

10.取值 ,X=np. arrage(15).reshape(3,5) 生成一个3行5列的数组
#1.生成一个二维数组X
X = np.arange(15).reshape(3,5)
X
#结果:array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#2.获取第一行元素
X[0]
#结果:array([0, 1, 2, 3, 4])
#3.获取倒数第一行元素
X[-1]
#结果:array([10, 11, 12, 13, 14])
#4.获取第一行第2个元素
X[(0,1)]
#结果:1
X[0,1]
#结果:1
运行效果图如下:

二:数组切片
11.一维数组切片:使用a=np. arange(10),产生一个一维数组
#1.创建一个一维数组a
a = np.arange(10)
a
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#2.获取前5个元素
a[0:5]
#结果:array([0, 1, 2, 3, 4])
a[:5]
#结果:array([0, 1, 2, 3, 4])
#3.获取后5个元素
a[5:]
#结果:array([5, 6, 7, 8, 9])
#4.获取索引为0-8的元素,且步长为2
a[0:8:2]
#结果:array([0, 2, 4, 6])
#5.将所有元素倒序排列
a[::-1]
#结果:array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
运行效果图如下:

12.二维数组切片
#1.重新打印二维数组X
X
#结果:array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#2.输出前两行的前三列
X[0:2,0:3]
#结果:array([[0, 1, 2],
# [5, 6, 7]])
X[:2,:3]
#结果:array([[0, 1, 2],
# [5, 6, 7]])
#3.错误的输出写法(先输出前两行,然后再输出前两行的前三行,所以最后还是只有两行数据)
X[:2][:3]
#结果:array([[0, 1, 2, 3, 4],
# [5, 6, 7, 8, 9]])
#4.输出前两行的所有列,步长为2
X[:2,::2]
#结果:array([[0, 2, 4],
# [5, 7, 9]])
#5.将所有行列倒序排列输出
X[::-1,::-1]
#结果:array([[14, 13, 12, 11, 10],
# [ 9, 8, 7, 6, 5],
# [ 4, 3, 2, 1, 0]])
运行效果图如下:

三:引用关系
13.列表中的引用关系如下:
#1.创建一个列表a
a = list(range(5))
a
#结果:[0, 1, 2, 3, 4]
#2.引用a中的前两个元素,赋值给b
b = a[:2]
b
#结果:[0, 1]
#3.修改b中第2个元素
b[1] = 111
#4.继续查看a的值,没有改变
a
#结果:[0, 1, 2, 3, 4]
运行效果图如下:

14.ndarray中的引用关系
#1.重新打印二维数组X
X
#结果:array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#2.获取X中前两行中的前两列,并赋值为X2
X2 = X[:2,:2]
X2
#结果:array([[0, 1],
# [5, 6]])
#3.修改X2中的第一个元素,并输出X2
X2[0,0]=99
X2
#结果:array([[0, 1],
# [5, 6]])
#4.重新打印X的值,发现第一个元素也变了
X
#结果:array([[99, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
运行效果图如下:

15.若不想改变原来的值,可在引用后面加上copy方法
#1.重新输出X的值
X
#结果:array([[99, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#2.取出X前2行中的前两列,赋值给X3,并加上copy()方法
X3 = X[:2,:2].copy()
X3
#结果:array([[99, 1],
# [ 5, 6]])
#3.改变X3中的第一个元素的值
X3[0,0] = 100
X3
#结果:array([[100, 1],
# [ 5, 6]])
#4.重新输出X
X
#结果:array([[99, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
运行效果图如下:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)