np.concatenate axis=-1
时间: 2023-06-05 09:47:21 浏览: 106
np.concatenate(axis=-1)是numpy中的一个函数,用于将多个数组沿着最后一个维度拼接起来。也就是说,如果有多个形状相同的数组,它们的最后一个维度的长度相同,那么可以使用np.concatenate(axis=-1)将它们拼接成一个形状更大的数组。其中,axis=-1表示沿着最后一个维度进行拼接。
相关问题
a = np.random.random([100,3]) b = np.arange(100).reshape([100,1]) a = np.concatenate([a,b],axis=-1) c = np.random.random([7,3]) d = np.array([1,5,8,11,52,45,31]) c = np.concatenate([c,d],axis=-1) 按照c中的-1列代表的位置更新a的所有数值
可以通过以下代码实现:
```python
import numpy as np
a = np.random.random([100, 3])
b = np.arange(100).reshape([100, 1])
a = np.concatenate([a, b], axis=-1)
c = np.random.random([7, 3])
d = np.array([1, 5, 8, 11, 52, 45, 31])
c = np.concatenate([c, d.reshape(-1, 1)], axis=-1)
a[:, -1] = c[:, -1]
print(a)
```
这里先将`d`通过`reshape`函数转换成列向量,然后将`c`和`d`沿着列方向合并,得到更新后的`c`。然后,直接将`c`的最后一列赋值给`a`的最后一列即可。最终输出更新后的`a`。
def stft(self, wave): result = [] # 按列为主序存储,也就是按通道为主序 wave = np.asfortranarray(wave) window = hann(self.frame_length, sym=False) channels = wave.shape[-1] for c in range(channels): data = wave[..., c] spectrogram = stft(data, n_fft=self.frame_length, hop_length=self.frame_step, window=window, center=False) spectrogram = np.expand_dims(spectrogram.T, axis=-1) result.append(spectrogram) result = np.concatenate(result, axis=-1) return result
这段代码定义了一个 `stft` 方法,用于计算音频信号的短时傅里叶变换(STFT)。下面是对该方法的解释:
- `result` 是一个空列表,用于存储每个通道的STFT结果。
- `wave` 是输入的音频波形数据。
- `wave = np.asfortranarray(wave)` 将 `wave` 转换为 Fortran 数组,以确保按列为主序存储,也就是按通道为主序。
- `window = hann(self.frame_length, sym=False)` 创建了一个长度为 `self.frame_length` 的汉宁窗口。
- `channels` 获取 `wave` 数组的最后一个维度,即通道数。
- 在一个循环中,对每个通道进行以下操作:
- `data = wave[..., c]` 提取当前通道的数据。
- `spectrogram = stft(data, n_fft=self.frame_length, hop_length=self.frame_step, window=window, center=False)` 对当前通道的数据应用 STFT,得到频谱图。
- `spectrogram = np.expand_dims(spectrogram.T, axis=-1)` 将频谱图转置,并在最后一个维度上添加一个新的维度。
- 将 `spectrogram` 添加到 `result` 列表中。
- `result = np.concatenate(result, axis=-1)` 将 `result` 列表中的所有频谱图沿最后一个维度进行连接,得到最终的结果。
- 返回最终的结果。
请注意,上述代码中的 `stft` 函数和 `hann` 函数的具体实现可能来自外部库或其他地方,因此需要确保这些函数在代码的上下文中可用。