首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Prolog中用给定值填充2D矩阵

在Prolog中,我们可以使用递归的方法来填充一个给定值的2D矩阵。以下是一个例子:

代码语言:txt
复制
% 定义一个二维矩阵
matrix([[_, _, _],
        [_, _, _],
        [_, _, _]]).

% 递归填充矩阵
fillMatrix(Value, Matrix) :-
    fillMatrix(Value, Matrix, 1, 1).

% 边界情况,填充最后一行的最后一个元素
fillMatrix(Value, Matrix, Row, Column) :-
    length(Matrix, NumRows),
    length(Matrix, NumColumns),
    Row =:= NumRows,
    Column =:= NumColumns,
    replaceElement(Matrix, Row, Column, Value, NewMatrix),
    printMatrix(NewMatrix).

% 边界情况,填充最后一行的非最后一个元素
fillMatrix(Value, Matrix, Row, Column) :-
    length(Matrix, NumRows),
    length(Matrix, NumColumns),
    Row =:= NumRows,
    Column < NumColumns,
    replaceElement(Matrix, Row, Column, Value, TempMatrix),
    NextColumn is Column + 1,
    fillMatrix(Value, TempMatrix, Row, NextColumn).

% 边界情况,填充非最后一行的最后一个元素
fillMatrix(Value, Matrix, Row, Column) :-
    length(Matrix, NumRows),
    length(Matrix, NumColumns),
    Row < NumRows,
    Column =:= NumColumns,
    replaceElement(Matrix, Row, Column, Value, TempMatrix),
    NextRow is Row + 1,
    fillMatrix(Value, TempMatrix, NextRow, 1).

% 递归填充非最后一行的非最后一个元素
fillMatrix(Value, Matrix, Row, Column) :-
    replaceElement(Matrix, Row, Column, Value, TempMatrix),
    NextColumn is Column + 1,
    fillMatrix(Value, TempMatrix, Row, NextColumn).

% 替换矩阵中特定位置的元素
replaceElement(Matrix, Row, Column, Value, NewMatrix) :-
    nth1(Row, Matrix, CurrentRow),
    nth1(Column, CurrentRow, _, TempRow),
    nth1(Column, NewRow, Value, TempRow),
    nth1(Row, NewMatrix, NewRow, TempMatrix),
    Matrix = TempMatrix.

% 打印矩阵
printMatrix(Matrix) :-
    maplist(writeln, Matrix).

以上代码中,我们首先定义了一个空的二维矩阵 matrix/1,其中 _ 表示未知的值。然后,我们定义了一个 fillMatrix/2 谓词,它接受一个值和一个矩阵,并使用递归的方式填充矩阵。在 fillMatrix/2 中,我们定义了四个不同的边界情况来处理不同的行和列。最后,我们定义了一个 replaceElement/5 谓词来替换矩阵中特定位置的元素。最后,我们定义了一个 printMatrix/1 谓词来打印矩阵。

使用方法:

代码语言:txt
复制
?- fillMatrix(a, Matrix).
[a, a, a]
[a, a, a]
[a, a, a]
true.

在这个例子中,我们使用值 a 来填充一个空的3x3矩阵。最终的结果是一个填充了给定值的矩阵。请注意,这只是一个示例,你可以根据自己的需求进行修改和扩展。同时,根据上述需求,推荐的腾讯云相关产品和产品介绍链接地址与此无关,因此不提供相关链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

EmguCV 常用函数功能说明「建议收藏」

大家好,又见面了,我是你们的朋友全栈君。AbsDiff,计算两个数组之间的绝对差。 dst(I)c = abs(src1(I)c-src2(I)c)。所有数组必须具有相同的数据类型和相同的大小(或ROI大小)。 累加,将整个图像或其所选区域添加到累加器和。 累积产品,将2张图像或其选定区域的产品添加到累加器中。 AccumulateSquare,将输入src或其选定的区域,增加到功率2,添加到累加器sqsum。 累积权重,计算输入src和累加器的加权和,以使acc成为帧序列的运行平均值:acc(x,y)=(1-alpha)* acc(x,y)+ alpha * image(x,y )如果mask(x,y)!= 0,其中alpha调节更新速度(累加器对于先前帧的多少速度).. 自适应阈值,将灰度图像转换为二进制图像。每个像素单独计算的阈值。对于方法CV_ADAPTIVE_THRESH_MEAN_C,它是blockSize x blockSize像素邻域的平均值,由param1减去。对于方法CV_ADAPTIVE_THRESH_GAUSSIAN_C,它是blockSize x blockSize像素邻域的加权和(高斯),由param1减去。 添加,将一个数组添加到另一个数组:dst(I)= src1(I)+ src2(I)if mask(I)!= 0所有数组必须具有相同的类型,除了掩码和大小(或ROI)尺寸)。 AddWeighted,计算的两个数组的加权和如下:dst(I)= src1(I)* alpha + src2(I)* beta + gamma所有的数组必须具有相同的类型和相同的大小(或ROI大小)。 ApplyColorMap,将颜色映射应用于图像。 ApproxPolyDP,近似具有指定精度的多边形曲线。 ArcLength,计算轮廓周长或曲线长度。 ArrowedLine,绘制从第一个点指向第二个点的箭头段。 BilateralFilter,将双边滤镜应用于图像。 BitwiseAnd,并计算两个数组的每元素的逐位逻辑连接:dst(I)= src1(I)&src2(I)if mask(I)!= 0在浮点数组的情况下,使用它们的位表示为了操作。所有阵列必须具有相同的类型,除了掩码和大小相同。 BitwiseNot,反转每个数组元素的每一位:。 BitwiseOr,计算两个数组的每元素逐位分离:dst(I)= src1(I)| src2(I)在浮点数组的情况下,它们的位表示用于操作。所有阵列必须具有相同的类型,除了掩码和大小相同。 BitwiseXor,计算两个数组的每元素的逐位逻辑连接:dst(I)= src1(I)^ src2(I)if mask(I)!= 0在浮点数组的情况下,使用它们的位表示为了操作。所有阵列必须具有相同的类型,除了掩码和大小相同。 模糊,使用归一化的盒式过滤器模糊图像。 BoundingRectangle,返回2d点集的右上角矩形。 BoxFilter,使用框过滤器模糊图像 BoxPoints(RotatedRect),计算输入2d框的顶点。 BoxPoints(RotatedRect,IOutputArray),计算输入2d框的顶点。 CalcBackProject,计算直方图的反投影。 CalcCovar矩阵,计算一组向量的协方差矩阵。 CalcGlobalOrientation,计算所选区域中的一般运动方向,并返回0到360之间的角度。首先,函数构建方向直方图,并将基本方向作为直方图最大值的坐标。之后,该函数计算相对于基本方向的移位,作为所有方向向量的加权和:运动越近,权重越大。得到的角度是基本方向和偏移的圆和。 CalcHist,计算一组数组的直方图 CalcMotionGradient,计算mhi的导数Dx和Dy,然后计算梯度取向为:方向(x,y)= arctan(Dy(x,y)/ Dx(x,y)),其中Dx(x,y)考虑Dy(x,y)“符号(如cvCartToPolar函数)。填写面罩后,指出方向有效(见delta1和delta2说明).. CalcOpticalFlowFarneback(IInputArray,IInputArray,IInputOutputArray,Double,Int32,Int32,Int32,Int32,Double,OpticalflowFarnebackFlag),使用Gunnar Farneback算法计算密集的光流。 CalcOpticalFlowFarneback(Image <Gray,Byte>,Image <Gray,Byte>,Image <Gray,Single>,Image <Gray,Single>,Double

02
  • Shader经验分享

    流水线 1.应用阶段:(CPU)输出渲染图元,粗粒度剔除等 比如完全不在相机范围内的需要剔除,文件系统的粒子系统实现就用到粗粒度剔除。 2.几何阶段:(GPU)把顶点坐标转换到屏幕空间,包含了模型空间 到世界空间 到观察空间(相机视角view) 到齐次裁剪空间(投影project2维空间,四维矩阵,通过-w<x<w判断是否在裁剪空间) 到归一化设备坐标NDC(四维矩阵通过齐次除法,齐次坐标的w除以xyz实现归一化) 到屏幕空间(通过屏幕宽高和归一化坐标计算)。 a.顶点着色器:坐标变换和逐顶点光照,将顶点空间转换到齐次裁剪空间。 b.曲面细分着色器:可选 c.几何着色器:可选 d.裁剪:通过齐次裁剪坐标的-w<x<w判断不在视野范围内的部分或者全部裁剪,归一化。 e.屏幕映射:把NDC坐标转换为屏幕坐标 3.光栅化阶段:(GPU)把几何阶段传来的数据来产生屏幕上的像素,计算每个图元覆盖了哪些像素,计算他们的颜色、 a.三角形设置:计算网格的三角形表达式 b.三角形遍历:检查每个像素是否被网格覆盖,被覆盖就生成一个片元。 c.片元着色器:对片元进行渲染操作 d.逐片元操作:模板测试,深度测试 混合等 e.屏幕图像 ------------------------------------------------------- 矩阵: M*A=A*M的转置(M是矩阵,A是向量,该公式不适合矩阵与矩阵) 坐标转换: o.pos = mul(UNITY_MATRIX_MVP, v.vertex);顶点位置模型空间到齐次空间 o.worldNormal = mul((float3x3)_Object2World,v.normal);//游戏中正常的法向量转换,转换后法向量可能不与原切线垂直,但是不影响游戏显示,而且大部分显示也是差不多的。一般用这个就行了。 o.worldNormal = mul(v.normal, (float3x3)_World2Object);顶点法向量从模型空间转换到世界空间的精确算法,公式是用_Object2World该矩阵的逆转置矩阵去转换法线。然后通过换算得到该行。 ------------------------------------------------------- API: UNITY_MATRIX_MVP 将顶点方向矢量从模型空间变换到裁剪空间 UNITY_MATRIX_MV 将顶点方向矢量从模型空间变换到观察空间 UNITY_MATRIX_V 将顶点方向矢量从世界空间变换到观察空间 UNITY_MATRIX_P 将顶点方向矢量从观察空间变换到裁剪空间 UNITY_MATRIX_VP 将顶点方向矢量从世界空间变换到裁剪空间 UNITY_MATRIX_T_MV UNITY_MATRIX_MV的转置矩阵 UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间转换到观察空间 _Object2World将顶点方向矢量从模型空间变换到世界空间,矩阵。 _World2Object将顶点方向矢量从世界空间变换到模型空间,矩阵。 模型空间到世界空间的矩阵简称M矩阵,世界空间到View空间的矩阵简称V矩阵,View到Project空间的矩阵简称P矩阵。 --------------------------------------------- _WorldSpaceCameraPos该摄像机在世界空间中的坐标 _ProjectionParams _ScreenParams _ZBufferParams unity_OrthoParams unity_Cameraprojection unity_CameraInvProjection unity_CameraWorldClipPlanes[6]摄像机在世界坐标下的6个裁剪面,分别是左右上下近远、 ---------------------------- 1.表面着色器 void surf (Input IN, inout SurfaceOutput o) {}表面着色器,unity特殊封装的着色器 Input IN:可以引用外部定义输入参数 inout SurfaceOutput o:输出参数 struct SurfaceOutput//普通光照 { half3 Albedo;//纹理,反射率,是漫反射的颜色值 half3 Normal;//法线坐标 half3 Emission;//自发光颜色 half Specular;//高光,镜面反射系数 half Gloss;//光泽度 half Alpha;//alpha通道 } 基于物理的光照模型:金属工作流Surfa

    04

    Nat. Mach. Intell. | 多模态补全和特征的联合变分自编码器

    今天为大家介绍的是来自威斯康星大学麦迪逊分校团队的一篇关于单细胞多模态的论文。单细胞多模态数据能够测量细胞的各种特征,从而深入了解细胞和分子机制。然而,多模态数据的生成仍然昂贵且具有挑战性,同时缺失模态也经常发生。最近,机器学习方法已经被开发用于数据补全,但通常需要完全匹配的多模态数据才能学习共同的潜在特征,可能缺乏模态特异性。为了解决这些问题,作者开发了一个机器学习模型,名为JAMIE。JAMIE接受单细胞多模态数据,这些数据可以在模态之间部分匹配样本。变分自编码器学习每个模态的潜在特征。然后,跨模态匹配样本的特征被聚合以识别联合的跨模态潜在特征,然后进行重构。为了进行跨模态补全,可以使用一个模态的潜在特征和另一个模态的解码器。为了提高解释性,作者使用Shapley值来确定跨模态补全和已知样本标签的输入特征的优先级。

    02
    领券