如何解决这种一键式编码错误“所有输入数组必须具有相同的形状”

时间:2019-11-03 09:45:19

标签: java c# php

我遇到的错误如下。

所有输入数组必须具有相同的形状

1 个答案:

答案 0 :(得分:0)

您不是要剥离线。正常的DNA序列由A,G,C和T组成。您还考虑了\r字符。您的输入是这样的:

CCGAGGGCTATGGTTTGGAAGTTAGAACCCTGGGGCTTCTCGCGGACACC\r
GAGTTTATATGGCGCGAGCCTAGTGGTTTTTGTACTTGTTTGTCGCGTCG\r
...
AATGTCGACCGAACTCCGCACTGCTGGCCCGGGCCTATATCGAGAGTGAC

因此,对于最后一行以外的其他行,编码器将生成形状为(50,5)的数组,因为该行中有5个不同的字符。对于最后一行,它将生成形状为(50,4)的数组,然后得到ValueError: all input arrays must have the same shape

要解决此问题,您可以在代码中的某个位置剥离序列。例如,这将起作用:

...

for sequence in sequences:
  integer_encoded = integer_encoder.fit_transform(list(sequence.strip()))
...

编辑: 另外,对于没有全部使用A,G,C和T的行,您可以跳过该行:

...
for sequence in sequences:
  sequence_list = list(sequence.strip())
  if len(set(sequence_list)) != 4:
    continue
  integer_encoded = integer_encoder.fit_transform(sequence_list)
...

或者,您可以找到另一种方法来制作所有one_hot_encoded数组的形状(50,4)。