我正在尝试创建一个三维张量与维(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)
问题似乎是尺寸不匹配。具体地说,}的切片大小为
tensor
的切片大小为(101,2)
,而{(100,2)
。在移除这些线路:
让这条线什么都不做:
^{pr2}$当我们不做任何事情使样本数奇数时,似乎就能做到这一点。在
如果您确实需要样本数为奇数,则首先需要更改该行,使其不再执行任何操作:
然后您将发现在最后一次迭代中,循环将失败。这是因为在计算
block_half
时,由于示例的奇数目的缘故,我们进行了舍入。因此,您需要做一些修改来正确地更新end
。在相关问题 更多 >
编程相关推荐