python-将掩码应用于for循环中的数组

时间:2018-08-23 12:25:04

标签: python numpy dictionary

我有此代码:

import numpy as np

result = {}
result['depth'] = [1,1,1,2,2,2]
result['generation'] = [1,1,1,2,2,2]
result['dimension'] = [1,2,3,1,2,3]
result['data'] = [np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0])]

for v in np.unique(result['depth']):
    temp_v = (result['depth'] ==  v)
    values_v = [result[string][temp_v] for string in result.keys()]
    this_v = dict(zip(result.keys(), values_v))

我要在其中创建一个名为“ dict”的新this_v,其键与原始字典result相同,但值要少。

该行:

values_v = [result[string][temp_v] for string in result.keys()]

出现错误

  

TypeError:仅整数标量数组可以转换为标量索引

我不了解,因为我可以创建 ex = result[result.keys()[0]][temp_v]了。只是不允许我使用for循环执行此操作,以便我可以填充列表。

关于它为什么不起作用的任何想法吗?

1 个答案:

答案 0 :(得分:1)

为了解决您的问题(查找和删除重复项),建议您使用pandas。这是一个Python模块,它使您的生活变得异常简单:

import numpy as np

result = {}
result['depth'] = [1,1,1,2,2,2]
result['generation'] = [1,1,1,2,2,2]
result['dimension'] = [1,2,3,1,2,3]
result['data'] = [np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0]),\
         np.array([0,0,0]), np.array([0,0,0]), np.array([0,0,0])]

# Here comes pandas!
import pandas as pd

# Converting your dictionary of lists into a beautiful dataframe
df = pd.DataFrame(result)

#>    data         depth dimension generation
# 0     [0, 0, 0]   1       1        1
# 1     [0, 0, 0]   1       2        1
# 2     [0, 0, 0]   1       3        1
# 3     [0, 0, 0]   2       1        2
# 4     [0, 0, 0]   2       2        2
# 5     [0, 0, 0]   2       3        2


# Dropping duplicates... in one single command!
df = df.drop_duplicates('depth')

#>    data         depth dimension generation
# 0     [0, 0, 0]   1       1        1
# 3     [0, 0, 0]   2       1        2

如果您希望将数据恢复为原始格式,则只需要一行代码即可!

df.to_dict('list')

#> {'data': [array([0, 0, 0]), array([0, 0, 0])],
#   'depth': [1, 2],
#   'dimension': [1, 1],
#   'generation': [1, 2]}