Numpy库的运用
目录
一、实验目的和要求
(1)使用Numpy库创建数组对象。
(2)对创建的数组对象进行访问、运算、操作、转置。
(3) 能够熟练使用Numpy创建数组对象,并对对创建的数组对象进行访问、运算、操作、转置。
二、实验内容
(1)创建一个10*10的ndarray对象,且矩阵边界全为1,里面全为0;
(2)创建一个代表国际象棋棋盘的8*8数组,其中棋盘的白格用0填充,棋盘黑格用1填充
(3)平面上有100个点,求任意两点间的欧式距离,并将其保存;
提示:使用np.linspace()函数; n=100
For i in range(n) X[i] = i (xi,yi) (xj,yj) Dist[i][j]**2= (xi-xj)**2 + (yi-yj)**2
三、实验步骤
任务一:
1.导包numpy
2.创建一个10*10且全为0的二维数组
3.将ndarray的第一行(索引为0的行)的所有元素设置为1。
将ndarray
的最后一列(索引为9的列)的所有元素设置为1。
将ndarray的第一列(索引为0的列)的所有元素设置为1。
将ndarray的最后一行(索引为9的行)的所有元素设置为1。
4. 输出修改后的ndarray
。
源码:
import numpy as np
ndarray= np.zeros((10,10), dtype =int)
ndarray[0,:]=1
ndarray[:,9]=1
ndarray[:,0]=1
ndarray[9,:]=1
print(ndarray)
任务二:
1. 导入NumPy库
2. 创建一个8x8的二维数组(即棋盘),并将所有元素初始化为0
3. 使用两个嵌套的for
循环来遍历棋盘的每一个位置(即每一个格子)。对于每个位置,计算其行索引和列索引的和(i + j
),然后检查这个和是否是偶数。如果是偶数,就将该位置的值设置为1,表示这是一个黑格
4.输出棋盘
源码:
import numpy as np
chessboard = np.zeros((8, 8), dtype=int)
for i in range(8):
for j in range(8):
if (i + j) % 2 == 0:
chessboard[i, j] = 1
print(chessboard)
任务三:
1. 使用NumPy的linspace
函数生成一个包含100个元素的数组,这些元素从0均匀增加到100。然后将这个数组赋值给x
和y
2. 初始化一个100x100的二维数组dis
,所有元素都设置为0,用于保存任意两点之间的距离。
3. 使用两个嵌套的for循环来遍历所有的点对。对于每一对点(i, j),计算它们的欧式距离
4. 输出得到的距离矩阵dis。
源码:
x=y=np.linspace(0,100,100)
dis=np.zeros([100,100])
for i in range(100):
for j in range(100):
dis[j,i]=((x[j]-x[i])**2+(y[j]-y[i])**2)**0.5
print(dis)
四、实验结果
任务一:
任务二:
任务三:
五、注意事项
1. 在创建10*10的ndarray对象时,要确保边界元素被正确设置为1,内部元素被正确设置为0。
2. 在创建国际象棋棋盘时,要注意利用行索引和列索引之和的奇偶性来判断白格和黑格。
3. 在计算距离时,要注意循环变量的使用,避免索引越界。
4. 任务三矩阵的索引是[j,i]而不是[i,j],这意味着矩阵dis存储的是距离矩阵的转置。
5.任务三 由于所有的点都位于同一条直线上,实际上y坐标并没有为距离计算提供任何新的信息。这意味着,尽管使用了x和y两个坐标,但计算出的距离实际上只与x坐标(或y坐标,因为它们是相同的)的差有关。因此,在这种情况下,距离矩阵将是一个对称矩阵,其值仅取决于点对的x坐标(或y坐标)之差。