【问题标题】:Appending arrays to matrix using Cupy使用 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。

【问题讨论】:

    标签: python numpy cupy


    【解决方案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 functionconcatenate function 不同,它强制在所有轴上堆叠的数组之间的维度相等。 cupy.stacknumpy.stack 在内部调用它们对应的 concatenate 函数来加入数组。

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多