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

问题描述 投票:0回答:3

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

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

有很多x, y, z的组合 我想把列表数组中所有的整数都除掉(所有的整数都在列表数组中) list[x][y][z])乘以100。

listarray的结构示例。

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] ]
 ] 
]

我试图为上面的listarray例子生成这样的输出。

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?

python arrays python-3.x list multidimensional-array
3个回答
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)

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]]]]

-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]]]])
© www.soinside.com 2019 - 2024. All rights reserved.