【问题标题】:convolution of .mat file and 1D array.mat 文件和一维数组的卷积
【发布时间】:2017-01-19 08:19:14
【问题描述】:

我的代码是:

import numpy as np
import scipy.io as spio

x=np.zeros((22113,1),float)

x= spio.loadmat('C:\\Users\\dell\\Desktop\\Rabia Ahmad spring 2016\\'
                'FYP\\1. Matlab Work\\record work\\kk.mat')

print(x)

x = np.reshape(len(x),1);

h = np.array([0.9,0.3,0.1],float)

print(h)

h = h.reshape(len(h),1);

dd = np.convolve(h,x)

我遇到的错误是“ValueError: object too deep for desired array” 请在这方面帮助我。

【问题讨论】:

  • 您在哪一行收到错误消息?
  • 加载后x是什么?显示打印。您可能需要对其进行索引以获取实际数组。
  • 最初的x=np.zeros... 行对您没有任何作用。您没有事先定义变量的形状或类型。 xloadmat 命令设置。
  • @Eric 我在以下行 dd = np.convolve(h,x) 中收到此错误
  • @hpaulj x 是一个 .mat 格式的音频文件,它包含浮点值

标签: python python-3.x numpy


【解决方案1】:
{'__globals__': [], '__version__': '1.0', 'ans': array([[ 0.13580322,
 0.13580322], [ 0.13638306, 0.13638306], [ 0.13345337, 0.13345337], 
 ..., [ 0.13638306, 0.13638306], [ 0.13345337, 0.13345337], ..., [   
 0.13638306, 0.13638306], [ 0.13345337, 0.13345337], ..., [-0.09136963,    
-0.09136963], [-0.12442017, -0.12442017], [-0.15542603, -0.15542603]])}

看到{}了吗?这意味着来自loadmatx 是一个字典。

x['ans'] 将是一个数组

array([[ 0.13580322,
     0.13580322], [ 0.13638306, 0.13638306], [ 0.13345337, 0.13345337],...]])

如果我算上 [] 右边是一个 (n,2) 浮点数组。

以下行没有意义:

x = np.reshape(len(x),1);

我怀疑您的意思是 x = x.reshape(...),就像您对 h 所做的那样。但这会使字典 x 出错。

当您说 the shape of x is (9,) and its dtype is uint16 时 - 您在代码中的哪个位置进行验证?

【讨论】:

    【解决方案2】:

    x = np.reshape(len(x),1); 没有做任何有用的事情。这完全丢弃了 x 中的数据,并创建了一个形状为 (1,) 的数组,唯一的元素是 len(x)

    在您的代码中,您将h 重塑为(3, 1),这是一个二维数组,而不是一维数组,这就是convolve 抱怨的原因。

    删除您的两个reshapes,而只是将squeeze=True 传递给scipy.io.loadmat - 这是必需的,因为matlab 没有一维数组的概念,并且squeeze 告诉scipy 尝试将(N, 1)(1, N) 数组到 (N,) 数组

    【讨论】:

    • 'import numpy as np import scipy.io as sio x=np.zeros((22113,1),float) x= sio.loadmat('C:\\Users\\dell\\ Desktop\\Rabia Ahmad spring 2016\\FYP\\1. Matlab Work\\record work\\kk.mat') print(x) squeeze=True h = np.array([0.9,0.3,0.1],float) dd = np.convolve(h,x)' 当我按照你的指示做时,我得到了这个错误 return multiarray.correlate(a, v[::-1], mode) TypeError : *: 'float' 和 'dict' 不支持的操作数类型
    • import numpy as np import scipy.io as sio x=np.zeros((22113,1),float) x= sio.loadmat('C:\\Users\\dell\\Desktop\\Rabia Ahmad spring 2016\\FYP\\1. Matlab Work\\record work\\kk.mat') print(x) squeeze=True h = np.array([0.9,0.3,0.1],float) dd = np.convolve(h,x) 当我按照您的指示进行操作时,我收到此错误 return multiarray.correlate(a, v[::-1], mode) TypeError: unsupported operand type(s) for *: dd = np.convolve(h,x) 行中的 'float' 和 'dict'
    • 您的x 不是数组本身。它是一个包含一个或多个数组的字典。您需要阅读loadmat 文档,并查看x。不要在没有先了解它是什么的情况下将其投入计算中。
    • @hpaulj x 是一个 .mat 格式的音频 .wav 文件,它包含浮点值
    • @hpaulj 负载显示 {'__globals__': [], '__version__': '1.0', 'ans': array([[ 0.13580322, 0.13580322], [ 0.13638306, 0.13638306], [ 0.13345337, 0.13345337], ..., [ 0.13638306, 0.13638306], [ 0.13345337, 0.13345337], ..., [ 0.13638306, 0.13638306], [ 0.13345337, 0.13345337], ..., [-0.09136963, -0.09136963], [-0.12442017, -0.12442017], [-0.15542603, -0.15542603]])}
    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多