这是我的阵列:
array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}
有没有人知道将x坐标为0的方法过滤到像这样的单独数组中。
filtered_array1 = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0]}
同样,有没有办法过滤链接到坐标的框,例如当它等于1时;像这样
filtered_array2 = {(0,0):[1], (0,2):[1], (0,4):[1], (1,0):[1], (1,2):[1], (1,4):[1]}
答案 0 :(得分:2)
你可以对这两个使用两个dict理解。 (旁注:“链接到坐标的框”称为列表)
array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}
filtered_array1 = {k: v for k, v in array.items() if k[0] == 0}
filtered_array2 = {k: v for k, v in array.items() if v[0] == 1}
print(filtered_array1)
print(filtered_array2)
此外,正如PM 2Ring评论的那样,只需构建一个过滤后的数组就可以完成dict理解,但是构建多个数组需要多次迭代原始数组,这使得它效率低下。您可以使用传统的for循环。
array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}
filtered_array1 = {}
filtered_array2 = {}
for k, v in array.items():
if k[0] == 0:
filtered_array1[k] = v
elif k[0] == 1:
filtered_array2[k] = v
经timeit
验证,前者返回时间值0.003447920083999634
而后者只有0.002893589437007904
。虽然现在没什么区别,但是当你有3个,4个或10个filtered_arrays时,数组变大了。差别很大。
答案 1 :(得分:1)
array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}
dict1 = {(k1, k2): v for (k1, k2), v in array.items() if k1 == 0}
print(dict1)
# {(0, 1): [0], (0, 0): [1], (0, 5): [0], (0, 4): [1], (0, 3): [0], (0, 2): [1]}
dict2 = {(k1, k2): v for (k1, k2), v in array.items() if v[0] == 1}
print(dict2)
# {(1, 2): [1], (0, 0): [1], (0, 4): [1], (1, 0): [1], (0, 2): [1], (1, 4): [1]}
答案 2 :(得分:0)
您可以使用dictionary comprehensions。
这也是dictionary,而不是list或(numpy)数组。
d = {(0, 0): [1], (0, 1): [0], (0, 2): [1], (0, 3): [0], (0, 4): [1], (0, 5): [0],
(1, 0): [1], (1, 1): [0], (1, 2): [1], (1, 3): [0], (1, 4): [1], (1, 5): [0]}
result_1 = {k: v for k, v in d.items() if k[0] == 0}
desired_result_1 = {(0, 0): [1], (0, 1): [0], (0, 2): [1], (0, 3): [0], (0, 4): [1],
(0, 5): [0]}
print(result_1 == desired_result_1) # prints True
result_2 = {k: v for k, v in d.items() if v[0] == 1}
desired_result_2 = {(0, 0): [1], (0, 2): [1], (0, 4): [1], (1, 0): [1], (1, 2): [1],
(1, 4): [1]}
print(result_2 == desired_result_2) # prints True