我有一个频谱图。这是129行x n列。 我想将列“削减”到20。然后我会做类似的事情:
if spectrogram.shape[1] > 20:
for row in spectrogram:
i = spectrogram.index(row)
row = row[:20]
spectrogram[i] = row
但是使用.index()
会引发错误,因此我尝试在SOF上使用.where()
,但是发生了另一个错误:
AttributeError: 'numpy.ndarray' object has no attribute 'where'
我应该怎么办?
答案 0 :(得分:0)
您应该能够不带循环地获取所需的切片(每当您试图遍历numpy数组时,通常会有更好的方法)。
spectrogram[:, :20]
这是一个简化的示例:给定5x10数组,仅取每行的前5个给定5x5数组:
import numpy as np
a = np.arange(50).reshape(5, 10)
a[:, :5]
结果
array([
[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[20, 21, 22, 23, 24],
[30, 31, 32, 33, 34],
[40, 41, 42, 43, 44]])