【问题标题】:How to use all the elements of the array using for loop?如何使用 for 循环使用数组的所有元素?
【发布时间】:2022-01-21 12:51:00
【问题描述】:

实际上,我需要将函数(global_displacement(X))的返回值放入另一个运行循环中。

有人可以告诉我如何获得所需的输出吗?

我犯了什么愚蠢的错误。

因为每次它只给我第一个([ 0, 0, X[0], X[1]]) OR

输出中的最后一个值([ X[20], X[21], X[53], X[54]]),

因为下面的代码中“return j”的缩进错误。

import numpy as np 


X = [ 0.19515612,  0.36477665,  0.244737,    0.42873321, 0.16864666,  0.08636661,  0.05376605, -0.57201897, -0.00935055, -1.24923862,  0.,         -1.53111525,  0.00935055, -1.24923862, -0.05376605, -0.57201897, -0.1686466,
     0.08636661, -0.244737,    0.42873321, -0.19515612,  0.36477665,  0.02279911,  0.  ,        0.3563355 ,  0.01379104,  0.   ,       0.42289958, -0.00747999,  0.   ,       0.0825908,  -0.02949519 , 0.   ,      -0.57435396,
     -0.04074819,  0.   ,      -1.25069528 ,-0.02972642,  0.    ,     -1.53227704, -0.    ,      0.   ,      -1.25069528 , 0.02972642 , 0.   ,      -0.57435396 , 0.04074819 , 0.     ,     0.0825908,   0.02949519,  0.  ,
        0.42289958,  0.00747999 , 0.      ,    0.3563355 , -0.01379104, -0.02279911]



def global_displacement(X):
    
    global_displacements = np.array( [[ 0,  0, X[0],  X[1]], [ X[0], X[1], X[2], X[3]], [ X[2],  X[3],X[4],  X[5]], [ X[4],X[5],X[6], X[7]],[ X[6],X[7],X[8],X[9]], [ X[8],X[9],X[10], X[11] ], [ X[10], X[11],X[12], X[13]], [ X[12], X[13],X[14], X[15]],[ X[14], X[15],X[16], X[17]],[ X[16], X[17],X[18], X[19]], [ X[18], X[19],X[20], X[21]],[ X[20], X[21], 0, 0],
                            [ X[0], X[1], X[23], X[24]], [ X[2], X[3], X[26],X[27]], [ X[4], X[5], X[29],X[30]], [ X[6], X[7], X[32],X[33]], [ X[8],X[9],X[35], X[36]], [ X[10], X[11], X[38], X[39]], [ X[12], X[13], X[41], X[42]] ,[ X[14], X[15], X[44], X[45]],[ X[16], X[17], X[47], X[48]],[ X[18], X[19], X[50], X[51]], [ X[20], X[21], X[53], X[54]] ] )
    
    for i in (global_displacements):
        j =  i.reshape(4,1)
        return j

print(global_displacement(X))

这是预期的输出,我需要通过调用此函数将这些值放入另一个循环中。

[[0.        ]
 [0.        ]
 [0.19515612]
 [0.36477665]]
[[0.19515612]
 [0.36477665]
 [0.244737  ]
 [0.42873321]]
[[0.244737  ]
 [0.42873321]
 [0.16864666]
 [0.08636661]]
[[ 0.16864666]
 [ 0.08636661]
 [ 0.05376605]
 [-0.57201897]]
[[ 0.05376605]
 [-0.57201897]
 [-0.00935055]
 [-1.24923862]]
[[-0.00935055]
 [-1.24923862]
 [ 0.        ]
 [-1.53111525]]
[[ 0.        ]
 [-1.53111525]
 [ 0.00935055]
 [-1.24923862]]
[[ 0.00935055]
 [-1.24923862]
 [-0.05376605]
 [-0.57201897]]
[[-0.05376605]
 [-0.57201897]
 [-0.1686466 ]
 [ 0.08636661]]
[[-0.1686466 ]
 [ 0.08636661]
 [-0.244737  ]
 [ 0.42873321]]
[[-0.244737  ]
 [ 0.42873321]
 [-0.19515612]
 [ 0.36477665]]
[[-0.19515612]
 [ 0.36477665]
 [ 0.        ]
 [ 0.        ]]
[[0.19515612]
 [0.36477665]
 [0.        ]
 [0.3563355 ]]
[[0.244737  ]
 [0.42873321]
 [0.        ]
 [0.42289958]]
[[0.16864666]
 [0.08636661]
 [0.        ]
 [0.0825908 ]]
[[ 0.05376605]
 [-0.57201897]
 [ 0.        ]
 [-0.57435396]]
[[-0.00935055]
 [-1.24923862]
 [ 0.        ]
 [-1.25069528]]
[[ 0.        ]
 [-1.53111525]
 [ 0.        ]
 [-1.53227704]]
[[ 0.00935055]
 [-1.24923862]
 [ 0.        ]
 [-1.25069528]]
[[-0.05376605]
 [-0.57201897]
 [ 0.        ]
 [-0.57435396]]
[[-0.1686466 ]
 [ 0.08636661]
 [ 0.        ]
 [ 0.0825908 ]]
[[-0.244737  ]
 [ 0.42873321]
 [ 0.        ]
 [ 0.42289958]]
[[-0.19515612]
 [ 0.36477665]
 [ 0.        ]
 [ 0.3563355 ]]

【问题讨论】:

  • 不管你什么时候return,如果你return j你通过j = i.reshape(4,1)得到j,那么返回值将是(4,1)的形状。您可以通过多种方式累积值,但您不想这样做 - 相反,您想编写一个 single 调用,将二维数组重新排列为 3 维数组.
  • 由于for 循环中的return 语句,您的循环只会进行一次 迭代。它不会遍历数组global_displacements 的所有行。

标签: python arrays function for-loop matrix


【解决方案1】:

您的函数已经将所有内容转换为正确的格式,除了内部值应存储到列表中。为此,您可以使用numpy.newaxis。它用于为您的数组添加一个新维度(关于它的功能很好 post)。

import numpy as np

def global_displacement(X):
    global_displacements = np.array( [[ 0,  0, X[0],  X[1]], [ X[0], X[1], X[2], X[3]], [ X[2],  X[3],X[4],  X[5]], [ X[4],X[5],X[6], X[7]],[ X[6],X[7],X[8],X[9]], [ X[8],X[9],X[10], X[11] ], [ X[10], X[11],X[12], X[13]], [ X[12], X[13],X[14], X[15]],[ X[14], X[15],X[16], X[17]],[ X[16], X[17],X[18], X[19]], [ X[18], X[19],X[20], X[21]],[ X[20], X[21], 0, 0],
                                [ X[0], X[1], X[23], X[24]], [ X[2], X[3], X[26],X[27]], [ X[4], X[5], X[29],X[30]], [ X[6], X[7], X[32],X[33]], [ X[8],X[9],X[35], X[36]], [ X[10], X[11], X[38], X[39]], [ X[12], X[13], X[41], X[42]] ,[ X[14], X[15], X[44], X[45]],[ X[16], X[17], X[47], X[48]],[ X[18], X[19], X[50], X[51]], [ X[20], X[21], X[53], X[54]] ] )

    new_structure = global_displacements[:, :, np.newaxis]   
    return new_structure

X = [ 0.19515612,  0.36477665,  0.244737,    0.42873321, 0.16864666,  0.08636661,  0.05376605, -0.57201897, -0.00935055, -1.24923862,  0.,         -1.53111525,  0.00935055, -1.24923862, -0.05376605, -0.57201897, -0.1686466,
     0.08636661, -0.244737,    0.42873321, -0.19515612,  0.36477665,  0.02279911,  0.  ,        0.3563355 ,  0.01379104,  0.   ,       0.42289958, -0.00747999,  0.   ,       0.0825908,  -0.02949519 , 0.   ,      -0.57435396,
     -0.04074819,  0.   ,      -1.25069528 ,-0.02972642,  0.    ,     -1.53227704, -0.    ,      0.   ,      -1.25069528 , 0.02972642 , 0.   ,      -0.57435396 , 0.04074819 , 0.     ,     0.0825908,   0.02949519,  0.  ,
        0.42289958,  0.00747999 , 0.      ,    0.3563355 , -0.01379104, -0.02279911]

result = global_displacement(X)

print(result)

输出:

[[[ 0.        ]
  [ 0.        ]
  [ 0.19515612]
  [ 0.36477665]]

 [[ 0.19515612]
  [ 0.36477665]
  [ 0.244737  ]
  [ 0.42873321]]

 [[ 0.244737  ]
  [ 0.42873321]
  [ 0.16864666]
  [ 0.08636661]]

 [[ 0.16864666]
  [ 0.08636661]
  [ 0.05376605]
  [-0.57201897]]

 [[ 0.05376605]
  [-0.57201897]
  [-0.00935055]
  [-1.24923862]]

 [[-0.00935055]
  [-1.24923862]
  [ 0.        ]
  [-1.53111525]]

 [[ 0.        ]
  [-1.53111525]
  [ 0.00935055]
  [-1.24923862]]

 [[ 0.00935055]
  [-1.24923862]
  [-0.05376605]
  [-0.57201897]]

 [[-0.05376605]
  [-0.57201897]
  [-0.1686466 ]
  [ 0.08636661]]

 [[-0.1686466 ]
  [ 0.08636661]
  [-0.244737  ]
  [ 0.42873321]]

 [[-0.244737  ]
  [ 0.42873321]
  [-0.19515612]
  [ 0.36477665]]

 [[-0.19515612]
  [ 0.36477665]
  [ 0.        ]
  [ 0.        ]]

 [[ 0.19515612]
  [ 0.36477665]
  [ 0.        ]
  [ 0.3563355 ]]

 [[ 0.244737  ]
  [ 0.42873321]
  [ 0.        ]
  [ 0.42289958]]

 [[ 0.16864666]
  [ 0.08636661]
  [ 0.        ]
  [ 0.0825908 ]]

 [[ 0.05376605]
  [-0.57201897]
  [ 0.        ]
  [-0.57435396]]

 [[-0.00935055]
  [-1.24923862]
  [ 0.        ]
  [-1.25069528]]

 [[ 0.        ]
  [-1.53111525]
  [ 0.        ]
  [-1.53227704]]

 [[ 0.00935055]
  [-1.24923862]
  [ 0.        ]
  [-1.25069528]]

 [[-0.05376605]
  [-0.57201897]
  [ 0.        ]
  [-0.57435396]]

 [[-0.1686466 ]
  [ 0.08636661]
  [ 0.        ]
  [ 0.0825908 ]]

 [[-0.244737  ]
  [ 0.42873321]
  [ 0.        ]
  [ 0.42289958]]

 [[-0.19515612]
  [ 0.36477665]
  [ 0.        ]
  [ 0.3563355 ]]]

【讨论】:

    【解决方案2】:

    首先,您不需要.reshape 将一个包含 N 个元素的一维数组转换为一个 N×1 的二维数组。您只需向该数组添加一个维度即可。

    其次,您通常不想编写循环来处理 Numpy 数组。您想使用 Numpy 工具一次处理所有内容。只需考虑全部维度的问题:您想将 M x N 的 2D 数组转换为 M x N x 1 的 3D 数组。那......仍然只是向数组添加一个维度。

    所以:

    global_displacements = np.array(...)
    return global_displacements[..., np.newaxis]
    

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多