.mat文件和1D数组的卷积

时间:2017-01-19 08:19:14

标签: python python-3.x numpy

我的代码是:

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:对象太深了所需的数组” 请帮助我解决这个问题。

2 个答案:

答案 0 :(得分: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]])}

见{}?这意味着x中的loadmat是字典。

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 - 代码中的哪个位置验证了哪个?

答案 1 :(得分:0)

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

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

删除你的reshape,而只是将squeeze=True传递给scipy.io.loadmat - 这是必需的,因为matlab不具备1d数组的概念,而squeeze告诉scipy尝试并将(N, 1)(1, N)数组展平为(N,)数组