将python嵌套数组中的每个元素除以整数

时间:2018-05-02 14:29:44

标签: python arrays python-3.x list multidimensional-array

我在python中有一个大的嵌套列表,列表中的一些元素是numpy数组。其结构如下:

listExample[x][y][z] = an integer
listExample[x][y] = a numpy array

x,y和z有很多种组合。我想将列表数组中的所有整数(所有这些都在list[x][y][z]中)除以100。

列表/数组的示例结构:

listExample[
 [
  [ [100, 200, 300], [230, 133, 234] ],
  [ [234, 232, 523], [231, 234, 554] ]
 ],
 [
  [ [701, 704, 204], [331, 833, 634] ],
  [ [734, 632, 523], [131, 434, 154] ]
 ] 
]

我正在尝试为上面的列表示例生成这样的输出:

listExample[
 [
  [ [1, 2, 3], [2.3, 1.33, 2.34] ],
  [ [2.34, 2.32, 5.23], [2.31, 2.34, 5.54] ]
 ],
 [
  [ [7.01, 7.04, 2.04], [3.31, 8.33, 6.34] ],
  [ [7.34, 6.32, 5.23], [1.31, 4.34, 1.54] ]
 ] 
]

我在上面的示例输入和输出中使用了缩进,以便更容易读取多维数组。

StackOverflow上的其他问题用整数使用numpy或类似的东西划分列表:

listExample = [i/100 for i in listExample]

但这不起作用,因为这是一个嵌套数组。它会吐出这个错误:

TypeError: unsupported operand type(s) for /: 'list' and 'int'

那么,我该如何将数组/列表中的每个整数除以100?

3 个答案:

答案 0 :(得分:0)

遍历列表,除以等于numpy数组。

loloa = [[np.array([1,2]), np.array([3,4])],[np.array([5,6])]]
for loa in loloa:
    for i in range(len(loa)):
        loa[i] = loa[i]/100
print(loloa)

答案 1 :(得分:0)

您可以使用NumPy的方法:

import numpy as np 
arr1 = [
 [
  [ [100, 200, 300], [230, 133, 234] ],
  [ [234, 232, 523], [231, 234, 554] ]
 ],
 [
  [ [701, 704, 204], [331, 833, 634] ],
  [ [734, 632, 523], [131, 434, 154] ]
 ] 
]
out = np.divide(arr1, 100) 

print(out)

输出:

[[[[1.   2.   3.  ]
   [2.3  1.33 2.34]]

  [[2.34 2.32 5.23]
   [2.31 2.34 5.54]]]


 [[[7.01 7.04 2.04]
   [3.31 8.33 6.34]]

  [[7.34 6.32 5.23]
   [1.31 4.34 1.54]]]]

答案 2 :(得分:-1)

如果您愿意使用第三方库,则可以使用numpy作为矢量化解决方案:

<强>设置

import numpy as np

lst = [
 [
  [ [100, 200, 300], [230, 133, 234] ],
  [ [234, 232, 523], [231, 234, 554] ]
 ],
 [
  [ [701, 704, 204], [331, 833, 634] ],
  [ [734, 632, 523], [131, 434, 154] ]
 ] 
]

<强>解决方案

res = np.array(lst)/100

array([[[[ 1.  ,  2.  ,  3.  ],
         [ 2.3 ,  1.33,  2.34]],

        [[ 2.34,  2.32,  5.23],
         [ 2.31,  2.34,  5.54]]],


       [[[ 7.01,  7.04,  2.04],
         [ 3.31,  8.33,  6.34]],

        [[ 7.34,  6.32,  5.23],
         [ 1.31,  4.34,  1.54]]]])