无法将值(100)从形状2广播到形状

2024-09-26 18:18:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个三维张量与维(101,2,1000)。我不得不把我找到的R代码翻译成python,但有一个问题,R从1开始迭代,python从零开始迭代。在

下面有没有办法解决这个问题?在

提前谢谢!在

df1 = pd.DataFrame(np.random.rand(1000, 2), columns=['Col1', 'Col2'])
a = np.array(df1)
a_stdnorm = stats.norm.ppf(a)
n_rows = a.shape[0]
n_cols = a.shape[1]
samples = 100
if samples % 2 == 0:
    samples = samples + 1 # force an odd number
samples_increment = samples - 1 # to cater for 1 based indices
tensor = np.zeros((samples, n_cols, n_rows))
    sum_col = a[:,0] + a[:,1]
    sort = np.argsort(sum_col)
    block_half = samples // 2
    start = 0
    end = start + samples_increment
    for n in range(n_rows):
        if (n + 1) - block_half > 0 and n + block_half <= n_rows:
            start = n - block_half
            end = start + samples_increment
        dx = sort[start:end]
        data = a_stdnorm[dx,:]
        tensor[:,:,sort[n]] = data

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-50-1b371b208d20> in <module>()
     22     dx = sort[start:end]
     23     all_data = a_stdnorm[dx,:]
---> 24     tensor[:,:,sort[n]] = all_data

ValueError: could not broadcast input array from shape (100,2) into shape (101,2)

Tags: datanpsortblockstartrowsenddf1
1条回答
网友
1楼 · 发布于 2024-09-26 18:18:58

问题似乎是尺寸不匹配。具体地说,tensor的切片大小为(101,2),而{}的切片大小为(100,2)。在

移除这些线路:

if samples % 2 == 0:
    samples = samples + 1 # force an odd number

让这条线什么都不做:

^{pr2}$

当我们不做任何事情使样本数奇数时,似乎就能做到这一点。在


如果您确实需要样本数为奇数,则首先需要更改该行,使其不再执行任何操作:

samples_increment = samples # to cater for 1 based indices

然后您将发现在最后一次迭代中,循环将失败。这是因为在计算block_half时,由于示例的奇数目的缘故,我们进行了舍入。因此,您需要做一些修改来正确地更新end。在

相关问题 更多 >

    热门问题