如何替换多维数组中的列表?
How to replace a list inside a multildimensional array?
我在 SO 上解决 ,但我尝试的方法遇到了一些问题。
OP 有一个如下所示的列表,
a = [[[100, 90, 80, 255],
[80, 10, 10, 255]],
[[0, 0, 0, 255],
[0, 0, 0, 255]]]
他们想用 [0,0,0,0] 替换 [0,0,0,255]。
为此,我首先尝试使用 np.where(a == [0,0,0,255])
获取此列表出现的所有索引,但输出是一个空数组。
接下来,我尝试将数组转换为 pandas
数据帧并应用 replace
函数,但数据帧仍然保持不变。
np.where
给我一个空数组并且 replace
没有更改数据框的原因是什么,我该如何解决这个问题?
您必须将 a
转换为 numpy 数组并使用:
a = np.array(a)
a[(a == [0, 0, 0, 255]).all(axis=2)] = [0, 0, 0, 0]
输出:
>>> a
array([[[100, 90, 80, 255],
[ 80, 10, 10, 255]],
[[ 0, 0, 0, 0],
[ 0, 0, 0, 0]]])
>>> a.tolist()
[[[100, 90, 80, 255], [80, 10, 10, 255]], [[0, 0, 0, 0], [0, 0, 0, 0]]]
我在 SO 上解决
OP 有一个如下所示的列表,
a = [[[100, 90, 80, 255],
[80, 10, 10, 255]],
[[0, 0, 0, 255],
[0, 0, 0, 255]]]
他们想用 [0,0,0,0] 替换 [0,0,0,255]。
为此,我首先尝试使用 np.where(a == [0,0,0,255])
获取此列表出现的所有索引,但输出是一个空数组。
接下来,我尝试将数组转换为 pandas
数据帧并应用 replace
函数,但数据帧仍然保持不变。
np.where
给我一个空数组并且 replace
没有更改数据框的原因是什么,我该如何解决这个问题?
您必须将 a
转换为 numpy 数组并使用:
a = np.array(a)
a[(a == [0, 0, 0, 255]).all(axis=2)] = [0, 0, 0, 0]
输出:
>>> a
array([[[100, 90, 80, 255],
[ 80, 10, 10, 255]],
[[ 0, 0, 0, 0],
[ 0, 0, 0, 0]]])
>>> a.tolist()
[[[100, 90, 80, 255], [80, 10, 10, 255]], [[0, 0, 0, 0], [0, 0, 0, 0]]]