【问题标题】:Remove keys() while loading matlab files in python在 python 中加载 matlab 文件时删除键()
【发布时间】:2020-04-23 17:41:31
【问题描述】:

我正在尝试在 python 中加载一个 matlab 文件,我已经写了这些行:

import numpy as np
import scipy.io as spio

f = np.load('adj_data.npy',allow_pickle = True)
array1 = np.array(f)
print(array1)
print(type(array1))

运行此代码后,我得到以下结果:

{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Feb 07 15:26:44 2018', '__version__': '1.0', '__globals__': [], 'A': array([[[0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00],
        [1.76007e-02, 2.65923e+00, 3.36400e-01, 3.66851e-02],
        [1.47450e-01, 1.98776e+00, 9.35137e-02, 1.11462e-02],
        ...,
        [0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00],
        [2.56731e-01, 2.77940e+00, 3.76996e-01, 1.92662e-02],
        [1.54293e-02, 2.99425e+00, 6.52976e-01, 3.54300e-02]],

       [[1.76007e-02, 2.65923e+00, 3.36400e-01, 3.66851e-02],
        [0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00],
        [1.65050e-01, 6.71471e-01, 2.42886e-01, 2.55389e-02],
        ...,
        [1.76007e-02, 2.65923e+00, 3.36400e-01, 3.66851e-02],
        [2.74331e-01, 1.20168e-01, 4.05960e-02, 5.59513e-02],
        [2.17143e-03, 3.35016e-01, 3.16577e-01, 1.25509e-03]],

       [[1.47450e-01, 1.98776e+00, 9.35137e-02, 1.11462e-02],
        [1.65050e-01, 6.71471e-01, 2.42886e-01, 2.55389e-02],
        [0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00],
        ...,
        [1.47450e-01, 1.98776e+00, 9.35137e-02, 1.11462e-02],
        [1.09281e-01, 7.91639e-01, 2.83482e-01, 3.04123e-02],
        [1.62879e-01, 1.00649e+00, 5.59462e-01, 2.42838e-02]]])}


       <class 'numpy.ndarray'>

如何删除数组的第一部分或 matlab 数组的 keys() 部分:

 {'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Wed Feb 07 15:26:44 2018', '__version__': '1.0', '__globals__': [], 'A':

【问题讨论】:

  • 那不是数组,那是dict。其中一个键,'A' 被映射到一个数组。您是在问如何从 dict 中获取值?
  • 我只想打印一个包含数字的简单数组 [ ],以删除 keys() 属性的第一部分。但是当我打印类型时,它不是dict,而是numpy array
  • 因为你做了array1 = np.array(f)。不知道您为什么希望它起作用,f 是一本字典。不要这样做array1 = np.array(f)。只需使用字典。再次,您是在问如何使用字典吗?这里没有.keys() 属性,我不确定你对matlab 的意思。同样,f 是一个字典,因此只需在键 'A' 处访问字典内的数组
  • keys() 被认为是可以从dict 中提取的所有属性使用此代码:r = f['A'] 但我收到一个新错误
  • 那个字典看起来像是来自spio.loadmat('something.mat'). But you show a np.load`调用。有人loadmatnp.save 吗?我想知道我们是否在 dict 周围看到了一个对象数组包装器?

标签: python matlab numpy scipy key


【解决方案1】:

如果是matlab.mat文件(好像是),使用:

import scipy.io as sio

array1 = sio.loadmat('adj_data.npy', mat_dtype = True)['A']

【讨论】:

  • 我试过了,但现在出现索引错误:IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
  • 从发布的数据看,key是A。可能是您没有正确保存文件。其实应该是file.mat。你是从 Matlab 中保存的吗?
猜你喜欢
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多