编写程序exp5_1.c,在主函数中定义一维数组int array[10],自定义以下函数:输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在(若存在,请输出下标)、给数组元素排序,要求在主函数中对各子函数进行调用和测试。
时间: 2023-04-25 12:02:06 浏览: 205
好的,以下是编写程序exp5_1.c的要求:
1. 在主函数中定义一维数组int array[10]。
2. 自定义以下函数:
- 输入数组元素:使用for循环输入数组元素。
- 输出数组元素:使用for循环输出数组元素。
- 求数组元素平均值:使用for循环计算数组元素总和,再除以数组长度。
- 输出数组元素最大值:使用for循环遍历数组,找到最大值并输出。
- 输出数组元素最小值:使用for循环遍历数组,找到最小值并输出。
- 查找某数值元素是否存在:使用for循环遍历数组,找到该数值元素并输出下标。
- 给数组元素排序:使用冒泡排序法对数组元素进行排序。
3. 在主函数中对各子函数进行调用和测试。
希望这些信息能够帮助你编写程序exp5_1.c。
相关问题
这段代码什么意思def run_posmap_300W_LP(bfm, image_path, mat_path, save_folder, uv_h = 256, uv_w = 256, image_h = 256, image_w = 256): # 1. load image and fitted parameters image_name = image_path.strip().split('/')[-1] image = io.imread(image_path)/255. [h, w, c] = image.shape info = sio.loadmat(mat_path) pose_para = info['Pose_Para'].T.astype(np.float32) shape_para = info['Shape_Para'].astype(np.float32) exp_para = info['Exp_Para'].astype(np.float32) # 2. generate mesh # generate shape vertices = bfm.generate_vertices(shape_para, exp_para) # transform mesh s = pose_para[-1, 0] angles = pose_para[:3, 0] t = pose_para[3:6, 0] transformed_vertices = bfm.transform_3ddfa(vertices, s, angles, t) projected_vertices = transformed_vertices.copy() # using stantard camera & orth projection as in 3DDFA image_vertices = projected_vertices.copy() image_vertices[:,1] = h - image_vertices[:,1] - 1 # 3. crop image with key points kpt = image_vertices[bfm.kpt_ind, :].astype(np.int32) left = np.min(kpt[:, 0]) right = np.max(kpt[:, 0]) top = np.min(kpt[:, 1]) bottom = np.max(kpt[:, 1]) center = np.array([right - (right - left) / 2.0, bottom - (bottom - top) / 2.0]) old_size = (right - left + bottom - top)/2 size = int(old_size*1.5) # random pertube. you can change the numbers marg = old_size*0.1 t_x = np.random.rand()*marg*2 - marg t_y = np.random.rand()*marg*2 - marg center[0] = center[0]+t_x; center[1] = center[1]+t_y size = size*(np.random.rand()*0.2 + 0.9) # crop and record the transform parameters src_pts = np.array([[center[0]-size/2, center[1]-size/2], [center[0] - size/2, center[1]+size/2], [center[0]+size/2, center[1]-size/2]]) DST_PTS = np.array([[0, 0], [0, image_h - 1], [image_w - 1, 0]]) tform = skimage.transform.estimate_transform('similarity', src_pts, DST_PTS) cropped_image = skimage.transform.warp(image, tform.inverse, output_shape=(image_h, image_w)) # transform face position(image vertices) along with 2d facial image position = image_vertices.copy() position[:, 2] = 1 position = np.dot(position, tform.params.T) position[:, 2] = image_vertices[:, 2]*tform.params[0, 0] # scale z position[:, 2] = position[:, 2] - np.min(position[:, 2]) # translate z # 4. uv position map: render position in uv space uv_position_map = mesh.render.render_colors(uv_coords, bfm.full_triangles, position, uv_h, uv_w, c = 3) # 5. save files io.imsave('{}/{}'.format(save_folder, image_name), np.squeeze(cropped_image)) np.save('{}/{}'.format(save_folder, image_name.replace('jpg', 'npy')), uv_position_map) io.imsave('{}/{}'.format(save_folder, image_name.replace('.jpg', '_posmap.jpg')), (uv_position_map)/max(image_h, image_w)) # only for show # --verify # import cv2 # uv_texture_map_rec = cv2.remap(cropped_image, uv_position_map[:,:,:2].astype(np.float32), None, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT,borderValue=(0)) # io.imsave('{}/{}'.format(save_folder, image_name.replace('.jpg', '_tex.jpg')), np.squeeze(uv_texture_map_rec))
这段代码是一个函数,用于将一张人脸图像进行三维重建并生成该人脸在二维图像上的 UV 位置图。具体步骤如下:
1. 加载人脸图像和拟合参数。
2. 生成人脸三维模型,并进行变换,得到变换后的人脸模型顶点位置。
3. 根据人脸关键点进行裁剪,得到人脸区域的图像,并记录变换参数。
4. 在 UV 空间中渲染人脸模型,并生成 UV 位置图。
5. 保存裁剪后的图像和 UV 位置图。
其中,变换参数包括旋转、平移、缩放等。UV 位置图是将人脸模型在 UV 空间中的位置映射到二维图像上的一张纹理图。
from scipy.io import loadmat import numpy as np import math import matplotlib.pyplot as plt import sys, os import pickle from mnist import load_mnist # 函数定义和画图 # 例子:定义step函数以及画图 def step_function(x): y=x>0 return np.array(y,int) def show_step(x): y=step_function(x) plt.plot(x,y,label='step function') plt.legend(loc="best") x = np.arange(-5.0, 5.0, 0.1) show_step(x) ''' 1. 根据阶跃函数step_function的例子,写出sigmoide和Relu函数的定义并画图。 ''' ''' 2. 定义softmax函数,根据输入x=[0.3,2.9,4.0],给出softmax函数的输出,并对输出结果求和。 ''' #获取mnist数据 def get_data(): (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False) return x_train,t_train,x_test, t_test #c初始化网络结构,network是字典,保存每一层网络参数W和b def init_network(): with open("sample_weight.pkl", 'rb') as f: network = pickle.load(f) return network #字典 ''' 3. 调用get_data和init_network函数, 输出x_train, t_train,x_test,t_test,以及network中每层参数的shape(一共三层) ''' ''' 4. 定义predict函数,进行手写数字的识别。 识别方法: 假设输入手写数字图像为x,维数为784(28*28的图像拉成一维向量), 第一层网络权值为W1(维数784, 50),b1(维数为50),第一层网络输出:z1=sigmoid(x*W1+b2)。 第二层网络权值为W2(维数50, 100),b2(维数为100),第二层网络输出:z2=sigmoid(z1*W2+b2)。 第三层网络权值为W3(维数100, 10),b3(维数为10),第三层网络输出(即识别结果):p=softmax(z2*W3+b3), p是向量,维数为10(类别数),表示图像x属于每一个类别的概率, 例如p=[0, 0, 0.95, 0.05, 0, 0, 0, 0, 0, 0],表示x属于第三类(数字2)的概率为0.95, 属于第四类(数字3)的概率为0.05,属于其他类别的概率为0. 由于x属于第三类的概率最大,因此,x属于第三类。 ''' ''' 5. 进行手写数字识别分类准确度的计算(总体分类精度),输出分类准确度。 例如测试数据数量为100,其中正确分类的数量为92,那么分类精度=92/100=0.92。 '''
1. Sigmoid函数的定义和画图:
```
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def show_sigmoid(x):
y = sigmoid(x)
plt.plot(x, y, label='sigmoid function')
plt.legend(loc="best")
x = np.arange(-5.0, 5.0, 0.1)
show_sigmoid(x)
```
ReLU函数的定义和画图:
```
def relu(x):
return np.maximum(0, x)
def show_relu(x):
y = relu(x)
plt.plot(x, y, label='ReLU function')
plt.legend(loc="best")
x = np.arange(-5.0, 5.0, 0.1)
show_relu(x)
```
2. Softmax函数的定义:
```
def softmax(x):
exp_x = np.exp(x)
sum_exp_x = np.sum(exp_x)
return exp_x / sum_exp_x
```
对于输入x=[0.3,2.9,4.0],softmax函数的输出为:
```
softmax(x)
array([0.01821127, 0.24519181, 0.73659691])
```
输出结果求和为1.
3. 调用get_data和init_network函数,输出x_train, t_train,x_test,t_test,以及network中每层参数的shape(一共三层):
```
x_train, t_train, x_test, t_test = get_data()
network = init_network()
for i, (w, b) in enumerate(network.items()):
print(f"Layer {i+1}: W shape:{w.shape}, b shape:{b.shape}")
print(f"x_train shape: {x_train.shape}")
print(f"t_train shape: {t_train.shape}")
print(f"x_test shape: {x_test.shape}")
print(f"t_test shape: {t_test.shape}")
```
4. 手写数字的识别代码如下:
```
def predict(network, x):
W1, b1 = network['W1'], network['b1']
W2, b2 = network['W2'], network['b2']
W3, b3 = network['W3'], network['b3']
z1 = sigmoid(np.dot(x, W1) + b1)
z2 = sigmoid(np.dot(z1, W2) + b2)
y = softmax(np.dot(z2, W3) + b3)
return y
# 获取测试数据
x_train, t_train, x_test, t_test = get_data()
network = init_network()
# 使用测试数据进行预测
accuracy_cnt = 0
for i in range(len(x_test)):
y = predict(network, x_test[i])
p = np.argmax(y)
if p == t_test[i]:
accuracy_cnt += 1
# 输出分类准确度
accuracy = float(accuracy_cnt) / len(x_test)
print("Accuracy:" + str(accuracy))
```
5. 进行手写数字识别分类准确度的计算(总体分类精度):
代码中已经实现,输出分类准确度即可。
阅读全文