2015-03-13 47 views
0

我有两个矩阵。计算总和超过axis=1。然后我想转置所获得的结果。结果包含在表达式中。您必须是矩阵1的元素,并且2按行逐行计算总和。总和的移调结果

您是否需要转置sum数组还是有其他方法?

matrix1 = [[ 5. 4. 3. 5. 3.] 
      [ 5. 7. 8. 2. 2.] 
      [ 8. 2. 4. 0. 3.] 
      [ 7. 2. 5. 3. 5.] 
      [ 3. 1. 3. 0. 2.]] 

matrix2 = [[ 5. 7. 6. 5. 4.] 
      [ 3. 45. 2. 3. 4.] 
      [ 2. 4. 6. 4. 3.] 
      [ 3. 4. 5. 6. 54.] 
      [ 4. 3. 6. 7. 5.]] 

s_1 = np.array(matrix_1.sum(axis=1)) 
s_1 = np.array(matrix_2.sum(axis=1)) 

s_1T = np.transpose(s_1) 
s_2T = np.transpose(s_2) 

结果:

S_1T 
[ 20. 24. 17. 22. 9.] 

S_2T 
[ 27. 57. 19. 72. 25.] 

如何转置阵?使用表达式

FROM 
[ 20. 24. 17. 22. 9.] 
[ 27. 57. 19. 72. 25.] 

TO 
[20. 
24. 
17. 
22. 
    9.] 

[27. 
    57. 
    19. 
    72. 
    25.] 

换位阵列:

result = ((matrix_2 - matrix_1)/matrix_1)/((s_2T-s_1T)/s_1T) 
+0

您可能是指[[20.] [24.] [17.] [22.] [9.]]? – iced 2015-03-13 11:01:53

回答

1
s1_t = map(lambda e: [e], s_1) 

最有可能的答案,你所追求的。

+2

这会给你一个Python列表,而不是NumPy数组 – YXD 2015-03-13 11:14:15

+0

你好。 s1_t = np.array(地图(lambda e:[e],s_1)) – kamfulebu 2015-03-13 11:23:28

1

当你拿出总和并回来一维数组时,你正在失去一个轴。移调对一维数组没有影响。

您可以插入一个新的轴心,或当你需要保持两个维度的总和,你可以指定keepdims=True(和避免需要转数组):

matrix1.sum(axis=1, keepdims=True) 

回报:

np.array([[20.], 
      [24.], 
      [17.], 
      [22.], 
      [ 9.]]) 
+0

TypeError:'keepdims'是此函数的无效关键字参数 – kamfulebu 2015-03-13 11:21:34

+0

您正在使用哪个版本的NumPy? – 2015-03-13 11:25:09

+0

1.6.1打包在ArcGIS 10.2中。 – kamfulebu 2015-03-13 11:31:41