【问题标题】:Access column with in another column header在另一个列标题中访问列
【发布时间】:2018-05-14 11:02:28
【问题描述】:

我在 python 中打开了一个 .mat 文件。我可以看到 CloudData 中有一个名为“CloudData”的主列,有两列“Points”和“RGB”。我可以使用以下方法访问点列:

points_data=(data['CloudData']['Points'][0:1])

其中 data 是使用 scipy.io 在 python 中读取的文件的名称。但是当我尝试读取 RGB 内部的数据值时,如下所示:

channel_data=(data['RGB']['data_values']) 

我收到错误抱怨: KeyError: 'RGB'

在python中打开.mat文件后有什么注意事项吗? 实际上,在 Matlab 中,变量 data_values 以 CloudData.RGB.data_values 作为标题显示在变量查看器窗口中。

第一步,我想读取 RGB 标头中的值,该标头位于 CloudData 中。

【问题讨论】:

  • 为什么不接受我的回答?仅仅因为我告诉您查看numpy 文档以获取有关如何处理np.ndarrays 的更多信息?我通过访问RGB 解决了您的问题。那是你要求的。您可以提出一个关于如何访问存储在数组中的数据的新问题。但撤回已接受的答案不应与提出另一个问题有关......
  • 那么你为什么再次不接受我的回答?它仍然是您问题的解决方案,如果您的问题发生变化,我无法更改它。您真的应该提出一个新问题,而不是撤回已接受的答案。

标签: python matlab numpy


【解决方案1】:

根据您写的内容,我认为您应该使用以下方式访问RGB

channel_data = (data['CloudData']['RGB'][0:1])

channel_data = (data['CloudData']['RGB']['data_values'][0:1])

取决于您在 matlab 中如何构造.mat 文件。

【讨论】:

  • 但它确实适用于Points?所以你的描述有错误。请使用最少的工作示例或至少足够的信息来更新您的描述,以了解您的 mat 文件的结构。
  • 对不起,我错过了完整的细节。第一种方法有效,但第二种方法显示如下错误:IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean array are valid indices
  • 是的,这是因为RGB 中很可能没有子dict,因此您尝试在RGB 中索引ndarray(或存储在那里的任何类型)使用索引data_values,它不是np.ndarray 的有效索引。但这只是猜测,因为提供的信息非常稀少。如果第一种方法有效,我将感谢您被标记为正确答案。
  • 这就是我认为的正当理由。但是如何将 RGB 转换为 dict 或如何从 RGB 访问 data_values。因为我看到 CloudData 是字典的主键,而 Points 和 RGB 是值。但是RGB还有两个字符串类型的“名称”(我猜我不需要)和matlab显示的“354 * 1单”类型的数据值。
  • type(data['CloudData']['RGB']) 的输出是什么?如果是np.ndarray,它是一个numpy数组,你可以通过切片来访问这些值。如果是dict,请尝试data['CloudData']['RGB'].keys() 以查看dict 中的哪些键,然后data['CloudData']['RGB'].items() 以查看您的数据存储在哪个键下。顺便一提。通过拥有 15 声望,您刚刚赢得了投票的特权。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多