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