我在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?
循环浏览各个列表,除以等于的 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)
你可以使用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]]]]
如果你愿意使用第三方库,你可以使用 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]]]])