1

首先,我有一个这样的输出数组(在 4x1 的矩阵中):

   array([[ -2.22044605e-15],
   [  2.82842712e+01],
   [ -2.22044605e-15],
   [  2.82842712e+01]])

和那个输出,我从 4x3 和 3x1 的矩阵乘法的返回值接收,如下所示:

def inverse_kinematic(self,Degree):
    # [W] = (1/r)[R][V] 
    self.R = array ( [[-1, 1, self.X1+self.Y1], [1, 1, self.X2-self.Y2],
                       [-1, 1, self.X3+self.Y3], [1, 1, self.X4-self.Y4]]) 

    self.V = array ( [[self.Vt*math.cos(math.radians(Degree))],
                       [self.Vt*math.sin(math.radians(Degree))],[ self.Wv]])
    self.W = []
    self.W = (1/self.r)*dot(self.R,self.V)
    return self.W

我真的很想拥有和输出像上面那样的数组,但是是两位十进制值,像这样:

   array([[ 0.00],
   [  28.28],
   [ 0.00],
   [  28.28]])

我已经厌倦了使用类似 "%.2f" % (number) 的方法,但仍然没有成功。我想知道有没有最好的方法在数组列表中设置十进制值?

此致,

格伦

4

2 回答 2

2

您的返回值的顺序非常不同:

2.82842712e+01 约 2.8

-2.22044605e-15 = 0.0000000000000022 大约为 0

您的数值评估很可能在分析上为零,而较小的值只是计算错误。

矩阵运算很容易在 numpy 中完成,你可以使用这样的东西:

    >>> import numpy as np
    >>> a = np.array([[11,12,13],[21,22,23],[31,32,33],[41,42,43]])
    >>> b = np.array([[1],[2],[3]])
    >>> x = np.dot(a,b)
    >>> x
    array([[ 74],
   [134],
   [194],
   [254]])

在这种情况下,您可能会满意

    >>> x = np.array([0.923423,0.12341235,0.213453241])
    >>> x.round(2)
    array([ 0.92,  0.12,  0.21])

numpy 数组很方便,因为您不必遍历它们的条目:

    >>> a = np.array([1,2,3,4,5])
    >>> a
    array([1, 2, 3, 4, 5])
    >>> a+2
    array([3, 4, 5, 6, 7])
    >>> a*10
    array([10, 20, 30, 40, 50])
    >>> np.sin(a)
    array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 , -0.95892427])
于 2012-05-14T17:53:38.203 回答
0

这是你要找的吗?印刷:

for arr in wheel_lists:
  for element in arr:
    print '%.2f' % element

环境:

for arr in wheel_lists:
  for i in xrange(len(arr)):
    arr[i] = float('%.2f' % 3.14)
于 2012-05-14T17:36:13.910 回答