使用 Cupy 将数组附加到矩阵
Posted
技术标签:
【中文标题】使用 Cupy 将数组附加到矩阵【英文标题】:Appending arrays to matrix using Cupy 【发布时间】:2020-09-02 19:08:21 【问题描述】:我正在使用 cupy 创建一个矩阵和一个数组。我只是想删除矩阵的第一行,然后将新数组水平附加到矩阵中。我计划将其放入一个循环中,在该循环中我将不断删除矩阵中的第一行并将新数组附加到底部。但我不断收到错误消息:ValueError: All arrays to concatenate must have the same ndim
。矩阵的形状是(10, 100),数组是(100,)。
import cupy as cp
hori_avg = [0]*100
buffer_size = 10
width = 100
a = cp.zeros((buffer_size, width))
new_frame = cp.ones(100)*3
a = a[1:, :] #delete first row
a = cp.stack((a,new_frame), axis=0) #append new row, but not working
我遇到了与 concatenate 相同的问题,而 cupy 似乎不存在 append。
【问题讨论】:
【参考方案1】:new_frame
数组的尺寸应该与数组a
的尺寸完全相同,以便在cp.stack
函数中使用。在这种情况下,您需要在将new_frame
的尺寸更改为(1,100)后使用cp.concatenate
。更正后的脚本如下:
import cupy as cp
hori_avg = [0]*100
buffer_size = 10
width = 100
a = cp.zeros((buffer_size, width))
new_frame = cp.ones((1,100))*3
a = a[1:, :] #delete first row
a = cp.concatenate((a,new_frame), axis=0)
如cupy.concatenate 文档中所述,
"tup(数组序列)- 要连接的数组。 所有这些都应该具有相同的维度,除了 指定轴”
这就是为什么我用 new_frame = cp.ones((1,100))*3
修改了线 new_frame
数组的形状,以使未指定的轴 (axis=1) 具有相同的维度(即 100)
关于这一点的更多信息:
不幸的是,cupy 文档尚未完善(截至 2020 年 11 月),但在大多数情况下,我们可以查看相应的 Numpy 文档。
numpy stack function 与concatenate function 不同,它强制在所有轴上堆叠的数组之间的维度相等。 cupy.stack
和 numpy.stack
在内部调用它们对应的 concatenate
函数来加入数组。
【讨论】:
以上是关于使用 Cupy 将数组附加到矩阵的主要内容,如果未能解决你的问题,请参考以下文章