【发布时间】:2018-08-03 18:44:27
【问题描述】:
忽略我的数据结构,只给出一个包含多个 numpy 数组的列表(所有数组的大小/形状完全相同):
list[0] = [[0, 2, 0],
[1, 3, 0]]
list[1] = [[0, 0, 0],
[0, 0, 3]]
list[2] = [[5, 0, 0],
[0, 0, 0]]
我想将此数组列表减少到只有一个数组。零意味着没有价值。对于每个条目,应采用唯一给定的值。没有重叠的值。对于给定位置,一个数组中始终只有一个赋值。
result: [[5, 2, 0]
[1, 3, 3]]
在我的例子中,我有一个字典,其中元组作为键,数组作为值。数组是布尔数组。每个 dict 条目代表一个特殊通道,并且在一个特定位置,只有一个 dict 条目具有值True。
我现在想用字典键替换所有 True 值,并将这个字典减少到只有一个数组。
例如(接近我的真实数据):
dict { (9, 2, 6): [[False, True],
[True, False]]
(1, 5, 8): [[True, False],
[False, True]] }
result: [[(1, 5, 8),(9, 2, 6)]
[(9, 2, 6),(1, 5, 8)]]
如何通过列表理解、numpy 函数和/或 map & reduce 来实现这一点?
第一次尝试:
起初我以为我可以将我的 numpy 数组转换为 0 和 1 (.astype(np.float32)),然后将这些数组与我的密钥相乘:
values_filled = [key_tuple * value_array for key_tuple, value_array in dict]
然后对所有数组求和:
final = reduce(lambda right, left: right + left, values_filled)
但这显然行不通,因为我的键是值的元组,而不仅仅是数字。
我尝试归档的操作与以下操作相反:
{color: np.all(mask, axis=-1) for (color, mask) in
((color, segmentation == color) for color in colors) if mask.max()}
通过这个操作,我拍摄了一个分割图像并创建了一个具有预定义颜色的字典。 numpy 数组在颜色等于图像中该位置的颜色/等于字典键的每个位置都有 True。
现在我想把这本字典还原成一个图像(字典上的变化)。
【问题讨论】:
-
这是可行的,但你有什么尝试?
-
@MooingRawr 我没有任何办法去做这件事。
-
你只有普通的 python 列表...没有
numpy喜欢 -
@IgnacioVergaraKausel 数组是 numpy 数组。为了简单起见,我在示例中省略了这个细节。
-
如果你问你应该采取什么方向,那就太自以为是了,太宽泛了。如果您问如何不尝试就做到这一点,那么您是在要求我们为您编写代码,这不是代码编写服务。对不起,如果我说的有点难,但规则就是规则......:\ 显示一些尝试(即使它不正确),我相信你会得到更快的答案。 (注意我没有标记这个,但我想我会等待编辑。)
标签: python arrays numpy dictionary reduce