标签: matrix

MATLAB中未知长度的矩阵?

我正在尝试设置一个可变长度的零矩阵,其中有两列我可以输出while循环的结果(目的是使用它来存储来自Euler方法的步骤数据和调整后的时间步长).长度将由循环的迭代次数确定.

我想知道是否有一种方法可以在我运行循环时执行此操作,或者是否需要将其设置为开始,以及如何执行此操作.

matlab matrix variable-length

24
推荐指数
3
解决办法
6万
查看次数

创建指标矩阵

对于向量V的大小为nx 1,我想创建二进制指示符矩阵中号的大小为nx最大(V) ,使得所述行条目中号具有1中的相应的列的索引,0否则.

例如:如果V

V = [ 3
      2
      1
      4]
Run Code Online (Sandbox Code Playgroud)

指标矩阵应该是

M= [ 0 0 1 0
     0 1 0 0
     1 0 0 0
     0 0 0 1]
Run Code Online (Sandbox Code Playgroud)

arrays matlab matrix

24
推荐指数
2
解决办法
8688
查看次数

使用row,col指示的矩阵的索引值

这可能很容易解决.我有一个mat500行×335列的2D矩阵和一个dat120425行的data.frame.该data.frame dat有两列IJ,它是整数索引的行,列的mat.我想将值添加mat到行的行中dat.

这是我的概念失败:

> dat$matval <- mat[dat$I, dat$J]
Error: cannot allocate vector of length 1617278737
Run Code Online (Sandbox Code Playgroud)

(我在Win32上使用R 2.13.1).深入挖掘,我发现我误用了矩阵索引,因为看起来我只得到了一个子矩阵mat,而不是我预期的单维数组值,即:

> str(mat[dat$I[1:100], dat$J[1:100]])
 int [1:100, 1:100] 20 1 1 1 20 1 1 1 1 1 ...
Run Code Online (Sandbox Code Playgroud)

我期待着类似的东西int [1:100] 20 1 1 1 20 1 1 1 1 1 ....使用行,列索引索引2D矩阵以获取值的正确方法是什么?

indexing r matrix r-faq

24
推荐指数
2
解决办法
2万
查看次数

将行/列标题添加到NumPy数组

我有一个NumPy ndarray我想添加行/列标题.

数据实际上是7x12x12,但我可以这样表示:

  A=[[[0, 1, 2, 3, 4, 5],
      [1, 0, 3, 4, 5, 6],
      [2, 3, 0, 5, 6, 7],
      [3, 4, 5, 0, 7, 8],
      [4, 5, 6, 7, 0, 9],
      [5, 6, 7, 8, 9, 0]]


     [[0, 1, 2, 3, 4, 5],
      [1, 0, 3, 4, 5, 6],
      [2, 3, 0, 5, 6, 7],
      [3, 4, 5, 0, 7, 8],
      [4, 5, 6, 7, 0, 9],
      [5, 6, 7, 8, 9, 0]]]
Run Code Online (Sandbox Code Playgroud)

其中A是我的2x6x6阵列.

如何在第一行和第一列中插入标题,以便每个数组在我的CSV …

python numpy matrix

24
推荐指数
2
解决办法
6万
查看次数

将上三角形复制到python矩阵中的下三角形

       iluropoda_melanoleuca  bos_taurus  callithrix_jacchus  canis_familiaris
ailuropoda_melanoleuca     0        84.6                97.4                44
bos_taurus                 0           0                97.4              84.6
callithrix_jacchus         0           0                   0              97.4
canis_familiaris           0           0                   0                 0
Run Code Online (Sandbox Code Playgroud)

这是我所拥有的python矩阵的简短版本.我在上三角形中有信息.是否有一个简单的功能可以将上三角形复制到矩阵的下三角形?

python matrix

24
推荐指数
3
解决办法
7896
查看次数

如何将对称矩阵转换为"dist"对象?

我想用来hclust聚类数据.但我不想使用"dist()"来生成dist对象.然后我发现我不能将对称矩阵作为距离矩阵传递给hclust.

如何将对称矩阵转换为"dist"对象?

r distance matrix

24
推荐指数
1
解决办法
1万
查看次数

Python如何在numpy中组合两个矩阵

Python的新手,在numpy中挣扎,希望有人可以帮助我,谢谢!

from numpy  import *   
A = matrix('1.0 2.0; 3.0 4.0')    
B = matrix('5.0 6.0')
C = matrix('1.0 2.0; 3.0 4.0; 5.0 6.0')
print "A=",A
print "B=",B
print "C=",C
Run Code Online (Sandbox Code Playgroud)

结果:

A= [[ 1.  2.]
   [ 3.  4.]]
B= [[ 5.  6.]]
C= [[ 1.  2.]
   [ 3.  4.]
   [ 5.  6.]]
Run Code Online (Sandbox Code Playgroud)

问题:如何使用A和B生成C,就像在matlab中一样C=[A;B]

python numpy matrix

24
推荐指数
2
解决办法
6万
查看次数

从r中的矩阵中的每一行中减去一个常量向量

我有一个5列4行的矩阵.我还有一个3列的向量.我想分别在矩阵的每一行中从列3,4和5中减去向量中的值.

b <- matrix(rep(1:20), nrow=4, ncol=5)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

c <- c(5,6,7)
Run Code Online (Sandbox Code Playgroud)

要得到

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    4    7   10
[2,]    2    6    5    8   11
[3,]    3    7    6    9   12
[4,]    4    8    7   10   13
Run Code Online (Sandbox Code Playgroud)

r vector matrix

24
推荐指数
2
解决办法
4万
查看次数

将权重应用于矩阵和顶点(骨骼旋转)

我正在网格中旋转骨架的骨骼,以获得低聚3D图形.在顶点着色器上它的应用就像这样.
GLSL:

    vec4 vert1 = (bone_matrix[index1]*vertex_in)*weight;
    vec4 vert2 = (bone_matrix[index2]*vertex_in)*(1-weight);
    gl_Position =  vert1+vert2;
Run Code Online (Sandbox Code Playgroud)

bone_matrix[index1]是一个骨骼的矩阵,是另一个骨骼bone_matrix[index2]的矩阵. weight指定vertex_in这些骨头的成员资格.问题是重量越接近.5,当施加旋转时,肘部的直径越大.我用大约10,000个顶点圆柱形状(带有梯度的重量)对它进行了测试.结果看起来像弯曲花园软管.

我从这些来源获得了加权方法.它实际上是我能找到的唯一方式:
http://www.opengl.org/wiki/Skeletal_Animation
http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html
http://blenderecia.orgfree.com /blender/skinning_proposal.pdf

initial_ugly_good

左边是形状如何开始,中间是上面方程如何旋转它,右边是我的目标.中间点是加权的0.5.弯曲度越大越好,180度直径为零.

  • 我已经尝试在着色器上组装矩阵,以便我可以将权重应用于旋转而不是结果顶点.它看起来很像右边的图片,但它需要为每个顶点组装矩阵(昂贵)
  • 我已经研究了四元数,但是glsl本身并没有支持它们(如果我错了,请纠正我)并且它们令人困惑.这是我需要做的吗?
  • 我认为每个关节有三块骨头,并在每根骨头之间添加一个"膝盖骨".这不会消除问题,但会减轻它.
  • 我正在考虑在旋转后将顶点与轴的原始距离投影.这将在180度时失败但是(相对)便宜.

因此,考虑到我可能没有考虑的选项或其他选项,其他人如何避免这种捏合效应?

编辑: 我已经使用四元数工作SLERP,但我选择不使用它,因为GLSL本身不支持它.我不能像汤姆所描述的那样让几何SLERP工作.我让NLERP在前90度工作,所以我在每个关节之间增加了一个"骨头".因此,为了将前臂弯曲40度,我将肘部和前臂各弯曲20度.这消除了挤压效应,代价是加倍骨量,这不是理想的解决方案.

glsl matrix skeletal-animation

24
推荐指数
3
解决办法
1502
查看次数

从矩阵获得俯仰和滚动而没有奇点

我正在研究2自由度(俯仰和滚动)的运动模拟器.我正在从游戏中读取变换矩阵,我需要获得角度并发送到硬件来驱动电机.由于欧拉角有奇点,我不能真正使用它们.它的行为如下:

什么时候应该这样:

我准备了在线示例以更好地显示问题:

// Get euler angles from model matrix
var mat = model.matrix;
mat.transpose();

var e = new THREE.Euler();
e.setFromRotationMatrix(mat, 'XZY');
var v = e.toVector3();

var pitch = -v.z;
var roll  = -v.x;
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/qajro0ny/3/

据我了解,这里有两个问题.

  1. 模拟器上没有偏航轴.
  2. 即使有偏航轴,电机也不会像计算机图形那样,即它们需要时间才能达到目标位置.

我已经读过关于万向节锁甚至实现了euler过滤器,但是没有按预期工作.关于万向节锁的大多数建议是使用四元数,但我不能用四元数驱动物理运动(或者我可以?).

轴顺序在这里并不重要,因为更改它只会将奇点从一个轴移动到另一个轴.

我需要以其他方式处理这个问题.

我尝试用矩阵乘以轴向量,然后使用十字和点积来获得角度,但这也失败了.我认为还应该进行轴重投,以实现这一目标,但我无法弄明白.但有些事情告诉我,这是正确的方法.它是这样的:http://jsfiddle.net/qajro0ny/53/

然后我提出了不同的想法.我知道以前的位置,所以可能会做以下事情:

  1. 将矩阵转换为四元数
  2. 计算当前和之前四元数之间的差异
  3. 将生成的四元数转换为欧拉角
  4. 将这些角度添加到静态俯仰,滚动和偏航变量.

所以我试过了......它奏效了!在任何方向上都没有奇点,在俯仰,滚转和偏航方面完美的360度旋转.完美的解决方案!除了......它不是.帧没有同步,所以经过一段时间的角度远离他们应该是什么.我一直在考虑某种同步机制,但我认为这不是正确的方法.

它看起来像这样:http://jsfiddle.net/qajro0ny/52/

和相同的逻辑,但直接与矩阵:http://jsfiddle.net/qajro0ny/54/

我搜索了网页的高低,我已经阅读了几十篇论文和其他问题/帖子,我简直无法相信没有什么能真正起作用.

我可能不理解或遗漏某些东西,所以这里是我发现和尝试的一切:

链接:http://pastebin.com/3G0dYLvu

代码:http://pastebin.com/PiZKwE2t(我把它们放在一起,所以它很乱)

我一定是错过了什么,或者我是从错误的角度看这个.

c++ math 3d matrix euler-angles

24
推荐指数
1
解决办法
1939
查看次数