转置

shader入门精要读书笔记06 数学基础

倖福魔咒の 提交于 2020-01-30 14:50:39
第四章 数学基础 一、坐标系 笛卡尔坐标系,分为二维三维。 二维坐标系 OpenGL是左下角为0,DirectX是左上角。 三维坐标系,3个坐标轴也被称为基矢量,长度为1的基矢量叫做标准正交基,长度不唯1的叫正交基。 三维笛卡尔坐标系又分为左手坐标系与右手坐标系。 Unity使用的是左手坐标系,摄像头的观察空间是右手坐标系(摄像头前方为z轴的负方向)。 二、点和矢量 矢量:有方向有模,没有位置。 点:只是一个位置。 矢量的加减乘除运算,模运算。 单位矢量:被归一化的矢量。通过在矢量上方加个^来表示是矢量的模。 单位矢量的运算:通过矢量除以矢量的模来进行计算。 单位矢量计算通常使用在法线方向、光源方向等。 矢量的点积(内积/点乘): 点积就是可以确定两个矢量的方向关系。投影长度=标量。 点乘结果>0 :两个矢量方向关系为<90°。(=0 : 垂直,<0 : >90°) 求适量的模可以将矢量对其自身进行点乘,运算后开方。 a·b=|a||b|cos夹角 矢量的叉积(外积/叉乘): 叉积结果是矢量,不满足交换律,叉积的结果是得到一个同时垂直于这两个矢量的新矢量。 使用左手定则,右手定则来判断在不同坐标系中,新得到的矢量方向。 |a×b|=|a||b|sin夹角 我们可以通过点乘(cos值)来确定某两个矢量的夹角关系。 还可以通过叉乘判断一个面的正面反面(通过确定面上的三个点的顺时针

python_矩阵转置

百般思念 提交于 2020-01-30 09:46:10
矩阵转置 """ 矩阵转置 算法:将list01中每列,存储到list02中每行 """ list01 = [ [ 1 , 2 , 3 , 4 ] , [ 5 , 6 , 7 , 8 ] , [ 9 , 10 , 11 , 12 ] , ] list02 = [ ] for c in range ( len ( list01 [ 0 ] ) ) : line = [ ] for r in range ( len ( list01 ) ) : line . append ( list01 [ r ] [ c ] ) list02 . append ( line ) print ( list02 ) 来源: CSDN 作者: 李富贵︴ 链接: https://blog.csdn.net/weixin_46198526/article/details/104108245

实例分割——转置卷积的学习笔记

不问归期 提交于 2020-01-20 03:30:11
2 备注 2.1 转置卷积stride的参数如何设置? 一种已知的设置方法是设置成2N,其中N为上采样的放大倍数,这样的原因是为了使用双线性插值,即“用四个特征点插值一个下采样点”; 不太清楚这种设置方法是否好不好,可以看看Detectron2的设置; 来源: CSDN 作者: songyuc 链接: https://blog.csdn.net/songyuc/article/details/104043987

Python_2048核心算法

空扰寡人 提交于 2020-01-20 02:54:36
2048 核心算法 核心:去零操作,相邻相同则合并, 向左移动:从左向右依次取出每行数据 向右移动:从右向左依次取出每行数据 向上移动:方阵转置后向左移动再转置 向下移动:方阵转置后向右移动再转置 list_merge = [ 2 , 0 , 2 , 0 ] 将0元素移动到列的末尾 def zero_to_end ( ) : """ 把list_merge中的0元素移动到末尾,其他元素相对位置不变 """ for i in range ( len ( list_merge ) - 1 , - 1 , - 1 ) : if list_merge [ i ] == 0 : list_merge . append ( 0 ) del list_merge [ i ] 将相同元素向左合并 def merge_same_element ( ) : """ 将list_merge中相同元素进行向左合并 """ # 调用0元素向右移动函数 zero_to_end ( ) # 相邻相同的元素相加 for i in range ( len ( list_merge ) - 1 ) : if list_merge [ i ] == list_merge [ i + 1 ] : list_merge [ i ] *= 2 # 删除后一个的元素 del list_merge [ i + 1 ] #

SHELL篇 转置文件

一笑奈何 提交于 2020-01-20 01:10:47
题目: 给定一个文件 file.txt,转置它的内容。 你可以假设每行列数相同,并且每个字段由 ' ' 分隔。 示例: 假设 file.txt 文件内容如下: name age alice 21 ryan 30 应当输出: name alice ryan age 21 30 解题方法一: #/bin/bash awk '{ # NF表示列数,NR表示当前行数 for (i=1; i<=NF; i++){ if(NR==1){ # 处理第一行时,将第i列的值($i)存入arr[i],i为数组的下标,数组不用定义可以直接使用 arr[i]=$i; } else{ # 不是第一行时,将该行对应i列的值拼接到arr[i] arr[i]=arr[i] " " $i } } } END{ # 每行处理完以后,输出数组 for (i=1; i<=NF; i++){ print arr[i] } }' file.txt 执行耗时12ms,内存占用3.5M 解题方法二: #!/bin/bash fields=`awk 'END{print NF}' file.txt` # 获取列数,列数代表文件转置后的行数 for i in $(seq 1 ${fields}) do awk -v i=$i -v ORS=' ' '{print $i}' file.txt | sed 's/[ ]*$//' #

数组转置

为君一笑 提交于 2020-01-19 12:09:34
思路一、首先定义一个新的数组,然后将原始数据倒序的方式插入新的数组中,最后改变原始数组的引用,将其指向新的空间。 import java.util.Scanner; public class Hello { public static void main(String[] args) { int data[]=new int[] {1,2,3,4,5,6}; int t[]=new int[data.length];//定义一个新的数组 int f=data.length-1; for(int i=0;i<data.length;i++) { t[i]=data[f]; f--; }//此时t中的内容就是转置后的结果 data=t;//将data指向t print(data); } public static void print(int t[]) { for(int i=0;i<t.length;i++) { System.out.print(t[i]+"、 "); } System.out.println(); } } 思路二、首先判断数组长度是奇数还是偶数,如果是偶数的话转置次数是长度的一半,若是奇数的话转换次数为(长度-1)的一半。 import java.util.Scanner; public class Hello { public static void main

pytorch --- tensor.permute()和torch.transpose()

我们两清 提交于 2020-01-18 03:24:29
tensor.permute(dim1, dim2, dim3, …) permute可以对任意高维矩阵进行转置.但只有 tensor.permute() 这个调用方式 x = torch . rand ( 2 , 3 , 4 ) print ( "x.shape:" , x . shape ) x = x . permute ( 2 , 1 , 0 ) print ( "x.shape:" , x . shape ) 输出: x.shape: torch.Size([2, 3, 4]) x.shape: torch.Size([4, 3, 2]) [Finished in 1.0s] 例2: t . rand ( 2 , 3 , 4 , 5 ) . permute ( 3 , 2 , 0 , 1 ) . shape Out [ 669 ] : torch . Size ( [ 5 , 4 , 2 , 3 ] ) 总结 传入permute方法的参数是维度, 未进行变换前的dim是[0, 1, 2]的方式, 转换后表示将第0维度和第2维度调换 torch.transpose(tensor, dim1, dim2) transpose只能操作2D矩阵的转置(就是每次transpose只能在两个维度之间转换,其他维度保持不变)。有两种调用方式

稀疏矩阵的压缩存储及其操作

若如初见. 提交于 2020-01-06 16:05:02
前言 按照压缩存储的概念,只存储稀疏矩阵的非零元; 一个三元组即可确定矩阵M的一个非零元; 主要有三种方法存储稀疏矩阵:三元组顺序表、行逻辑链接的顺序表、十字链表。 三元组顺序表 结构体和头文件 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 12500 typedef struct { int i, j; // 非零元的行号,列号 int e; }Triple; typedef struct { Triple data[MAXSIZE+1]; int mu, nu, tu; //矩阵的行数,列数,非零元个数 }TSMatrix; 创建和存储稀疏矩阵 //创建稀疏矩阵 void create(TSMatrix *M, int mu, int nu, int tu) { (*M).mu = mu; (*M).nu = nu; (*M).tu = tu; M = (TSMatrix *) malloc (tu * sizeof(Triple)); } //压缩存储稀疏矩阵 void init(TSMatrix *M) { for(int n = 1; n <= (*M).tu; n++) { printf("输入第%d个非零元,格式为“行号 列号 值”(空格隔开):", n); int row, col, value;

稀疏矩阵的压缩存储及其操作

你。 提交于 2020-01-05 13:34:27
前言 按照压缩存储的概念,只存储稀疏矩阵的非零元; 一个三元组即可确定矩阵M的一个非零元; 主要有三种方法存储稀疏矩阵:三元组顺序表、行逻辑链接的顺序表、十字链表。 三元组顺序表 结构体和头文件 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 12500 typedef struct { int i, j; // 非零元的行号,列号 int e; }Triple; typedef struct { Triple data[MAXSIZE+1]; int mu, nu, tu; //矩阵的行数,列数,非零元个数 }TSMatrix; 创建和存储稀疏矩阵 //创建稀疏矩阵 void create(TSMatrix *M, int mu, int nu, int tu) { (*M).mu = mu; (*M).nu = nu; (*M).tu = tu; M = (TSMatrix *) malloc (tu * sizeof(Triple)); } //压缩存储稀疏矩阵 void init(TSMatrix *M) { for(int n = 1; n <= (*M).tu; n++) { printf("输入第%d个非零元,格式为“行号 列号 值”(空格隔开):", n); int row, col, value;

JAVA实训第二次作业

烂漫一生 提交于 2019-12-18 23:46:54
一维数组的创建和遍历。 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数。要求: (1) 首先按“顺序”遍历,即打印顺序为:从第一个人到第四个人; (2) 然后按“逆序”遍历,即打印顺序为:从从第四个人到第一个人; (3) 输出最高分; (4) 输出最低分; Arrays类的sort方法的理解与应用(参照110页程序)。 对无序的10个数字使用Arrays类的sort方法进行排序。要求: ² 声明并初始化数组 ² 按如下格式输出排序后的数组 sum[0] = 1 sum[1] = 2 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目。 身份证号码的判断。 声明String类型的字符串,保存身份证号码。编写程序判断: 1)该号码是否为湖南长沙的号码(判断依据:前4位为4301,即长沙号码;否则不是长沙号码)。 2)该号码主人的性别(判断依据:第17位为奇数,性别为男;第17位为偶数,性别为女)。 附加:实现一个二维数组的转置,操作过程是将二维数组表示的矩阵对应的每一个元素number[i][j]被置为number[j][i]。要求: 可以借助一个新的数组来完成转置 如果不借助新的数组完成转置。 转置举例: 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9 来源: https://www.cnblogs.com