Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:无法将输入数组从形状(83)广播到形状(84)_Python_Arrays_Numpy_Dictionary - Fatal编程技术网

Python ValueError:无法将输入数组从形状(83)广播到形状(84)

Python ValueError:无法将输入数组从形状(83)广播到形状(84),python,arrays,numpy,dictionary,Python,Arrays,Numpy,Dictionary,这部分代码的目标是获取一个字典列表,获取一个特定的字典,使用这个字典的值创建一个列表,将列表转换成一个numpy数组,并对我在前面代码部分中构建的所有3399个字典(len(X))执行此操作。这个过程的每一步都很顺利,直到最后一步 input_array = np.zeros([len(X),84]) for i in range(0,len(X)): input_array[i,:] = np.array(list(inputs_dict[i].values())) 执行这些代码行时,将显示

这部分代码的目标是获取一个字典列表,获取一个特定的字典,使用这个字典的值创建一个列表,将列表转换成一个numpy数组,并对我在前面代码部分中构建的所有3399个字典(len(X))执行此操作。这个过程的每一步都很顺利,直到最后一步

input_array = np.zeros([len(X),84])
for i in range(0,len(X)):
input_array[i,:] = np.array(list(inputs_dict[i].values()))
执行这些代码行时,将显示以下错误:

ValueError: could not broadcast input array from shape (83) into shape (84)
嗯,解决办法似乎很明显,对吗?只要更改初始化数组的维度,所有内容都将被修复。。。不完全是。按如下方式改变维度会产生一个非常奇怪的结果,无论我做什么或尝试什么,我似乎都无法绕过这个结果

input_array = np.zeros([len(X),83])
for i in range(0,len(X)):
input_array[i,:] = np.array(list(inputs_dict[i].values()))
ValueError: could not broadcast input array from shape (84) into shape (83)
更改初始化数组的维度会以某种方式更改我已经预先制作好的数组的维度,这些数组需要放入大的2D数组结构中

我真的试着用我能找到的每一个可能的函数来规避这个问题,包括重塑、追加、连接、堆叠等等

如果能找到解决这个问题的方法/一种从字典列表中提取值并将其放入numpy数组的更简单方法,那将是一个巨大的帮助

完整代码: 将numpy作为np导入 作为pd进口熊猫 从收款进口柜台 进口火炬 从火炬进口自动标签,nn

X = pd.read_csv('PromoterTrain.csv', index_col=0).values.tolist()
y = pd.read_csv('SigmaTrain.csv', index_col=0).values.tolist()

def reverse_complement(dna):
        complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
        return ''.join([complement[base] for base in dna[::-1]])

X = [''.join(x) for x in X]    
X_comp = [reverse_complement(X[i]) for i in range(0,len(X))] 
kmer_1 = ['A','T','G','C']
kmer_2 = ['AA', 'AT', 'AG', 'AC', 'TA', 'TT', 'TG', 'TC', 'GA', 'GT', 'GG', 
'GC', 'CA', 'CT', 'CG', 'CC']
kmer_3 = ['AAA', 'AAT', 'AAG', 'AAC', 'ATA', 'ATT', 'ATG', 'ATC', 'AGA', 
'AGT', 'AGG', 'AGC', 'ACA', 'ACT', 'ACG', 'ACC', 'TAA', 'TAT', 'TAG', 'TAC', 
'TTA', 'TTT', 'TTG', 'TTC', 'TGA', 'TGT', 'TGG', 'TGC', 'TCA', 'TCT', 'TCG', 
'TCC', 'GAA', 'GAT', 'GAG', 'GAC', 'GTA', 'GTT', 'GTG', 'GTC', 'GGA', 'GGT', 
'GGG', 'GGC', 'GCA', 'GCT', 'GCG', 'GCC', 'CAA', 'CAT', 'CAG', 'CAC', 'CTA', 
'CTT', 'CTG', 'CTC', 'CGA', 'CGT', 'CGG', 'CGC', 'CCA', 'CCT', 'CCG', 'CCC']

inputs_default = {'A':0,'T':0,'G':0,'C':0}
for i in range(0,len(kmer_2)-1):
        inputs_default[kmer_2[i]] = 0
for i in range(0,len(kmer_3)-1):
        inputs_default[kmer_3[i]] = 0

def count_kmers(seq, K):
        return Counter(seq[start:start+K] for start in range(len(seq) - K))

inputs_dict = []
combined_1mers = {}
combined_2mers = {}
combined_3mers = {}
combined_1mers_revcomp = {}
combined_2mers_revcomp = {}
combined_3mers_revcomp = {}

for i in range(0,len(X)-1):
    combined_1mers = count_kmers(X[i],1)
    combined_2mers = count_kmers(X[i],2)
    combined_3mers = count_kmers(X[i],3)
    combined_1mers_revcomp = count_kmers(X_comp[i],1)
    combined_2mers_revcomp = count_kmers(X_comp[i],2)
    combined_3mers_revcomp = count_kmers(X_comp[i],3)    
    combined_kmers_forward = 
{**combined_1mers,**combined_2mers,**combined_3mers}
    combined_kmers_revcomp = 
{**combined_1mers_revcomp,**combined_2mers_revcomp,**combined_3mers_revcomp}
    combined_kmers = dict((n, combined_kmers_forward.get(n, 
0)+combined_kmers_revcomp.get(n, 0)) for n in 
set(combined_kmers_forward)|set(combined_kmers_revcomp))
    inputs_dict.append(dict((n, inputs_default.get

input_array = np.zeros([len(X),84])
for i in range(0,len(X)):
    input_array[i,:] = np.array(list(inputs_dict[i].values()))
输入_dict[0:2]的输出给出:

[{'A': 28,
  'AA': 10,
  'AAA': 3,
  'AAC': 3,
  'AAG': 3,
  'AAT': 1,
  'AC': 6,
  'ACA': 2,
  'ACC': 0,
  'ACG': 2,
  'ACT': 2,
  'AG': 4,
  'AGA': 1,
  'AGC': 0,
  'AGG': 1,
  'AGT': 2,
  'AT': 8,
  'ATA': 0,
  'ATC': 4,
  'ATG': 3,
  'ATT': 1,
  'C': 22,
  'CA': 9,
  'CAA': 3,
  'CAC': 2,
  'CAG': 1,
  'CAT': 3,
  'CC': 2,
  'CCA': 1,
  'CCG': 0,
  'CCT': 1,
  'CG': 6,
  'CGA': 1,
  'CGC': 3,
  'CGG': 0,
  'CGT': 2,
  'CT': 4,
  'CTA': 0,
  'CTC': 0,
  'CTG': 1,
  'CTT': 3,
  'G': 21,
  'GA': 7,
  'GAA': 3,
  'GAC': 0,
  'GAG': 0,
  'GAT': 4,
  'GC': 6,
  'GCA': 1,
  'GCC': 1,
  'GCG': 3,
  'GCT': 0,
  'GG': 2,
  'GGA': 1,
  'GGC': 1,
  'GGG': 0,
  'GGT': 0,
  'GT': 6,
  'GTA': 1,
  'GTC': 0,
  'GTG': 2,
  'GTT': 3,
  'T': 29,
  'TA': 2,
  'TAA': 1,
  'TAC': 1,
  'TAG': 0,
  'TAT': 0,
  'TC': 7,
  'TCA': 4,
  'TCC': 1,
  'TCG': 1,
  'TCT': 1,
  'TG': 9,
  'TGA': 4,
  'TGC': 2,
  'TGG': 1,
  'TGT': 2,
  'TT': 10,
  'TTA': 1,
  'TTC': 3,
  'TTG': 2,
  'TTT': 3},
 {'A': 26,
  'AA': 8,
  'AAA': 3,
  'AAC': 1,
  'AAG': 1,
  'AAT': 3,
  'AC': 4,
  'ACA': 2,
  'ACC': 1,
  'ACG': 0,
  'ACT': 1,
  'AG': 6,
  'AGA': 3,
  'AGC': 2,
  'AGG': 0,
  'AGT': 1,
  'AT': 8,
  'ATA': 1,
  'ATC': 2,
  'ATG': 2,
  'ATT': 3,
  'C': 24,
  'CA': 7,
  'CAA': 1,
  'CAC': 2,
  'CAG': 2,
  'CAT': 2,
  'CC': 4,
  'CCA': 1,
  'CCG': 2,
  'CCT': 0,
  'CG': 6,
  'CGA': 1,
  'CGC': 3,
  'CGG': 1,
  'CGT': 0,
  'CT': 6,
  'CTA': 0,
  'CTC': 3,
  'CTG': 2,
  'CTT': 1,
  'G': 23,
  'GA': 7,
  'GAA': 2,
  'GAC': 0,
  'GAG': 3,
  'GAT': 2,
  'GC': 8,
  'GCA': 2,
  'GCC': 1,
  'GCG': 3,
  'GCT': 2,
  'GG': 3,
  'GGA': 1,
  'GGC': 1,
  'GGG': 0,
  'GGT': 1,
  'GT': 4,
  'GTA': 1,
  'GTC': 0,
  'GTG': 2,
  'GTT': 1,
  'T': 27,
  'TA': 4,
  'TAA': 2,
  'TAC': 1,
  'TAG': 0,
  'TAT': 1,
  'TC': 7,
  'TCA': 2,
  'TCC': 1,
  'TCG': 1,
  'TCT': 3,
  'TG': 8,
  'TGA': 2,
  'TGC': 2,
  'TGG': 2,
  'TGT': 2,
  'TT': 8,
  'TTA': 2,
  'TTC': 2,
  'TTG': 1,
  'TTT': 3}]
TL;博士 检查
inputs\u dict
对象中的内容


长期 当您使用
np.zeros([x,y])
时,它返回一个由x行和y列组成的矩阵,其中填充了零值:

>>> import numpy as np
>>> np.zeros([3,10])
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
>>> np.zeros([3,10]).shape
(3, 10)
使用
范围(x,y)
时,它将返回一个从x开始到y-1结束的列表:

>>> list(range(0, 3))
[0, 1, 2]
这样做会用浮点列表覆盖numpy数组的一行:

numpy_array[i,:] = [0,1,2,3,4,5,6,7,8,9]
最初:

>>> inputs = np.zeros([3,10])

>>> inputs[0,:]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>> inputs[1,:]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>> inputs[2,:]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

>>> inputs
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
覆盖行:

>>> inputs = np.zeros([3,10])

>>> inputs[0,:] = [0,1,2,3,4,5,6,7,8,9]

>>> inputs[0,:]
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

>>> inputs
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
只要
输入[i,:]=[0,1,2,3,4,5,6,7,8,9]
的左右侧大小相同,就应该成功覆盖该行。否则你会在你的问题中发现同样的错误

>>> inputs[1,:] = [0,1,2,3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot copy sequence with size 4 to array axis with dimension 10
您希望将其放入左侧幻灯片的
input_array[i,:]=np.array(list(inputs_dict[i].values())

现在,如果我们在
输入[u dict['even-values']
中的值数量与左侧的值不匹配,您将遇到问题中的错误:

>>> inputs = np.zeros([3,10])

>>> inputs_dict = {'even-values': {1:2, 3:4, 5:6, 7:8, 9:10, 11:12, 13:14}}

>>> np.array(list(inputs_dict['even-values'].values()))
array([ 2,  4,  6,  8, 10, 12, 14])

# Right-side shape.
>>> np.array(list(inputs_dict['even-values'].values())).shape
(7,)

# Left-side shape.
>>> inputs[1,:].shape
(10,)

>>> inputs[1,:] = np.array(list(inputs_dict['even-values'].values()))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (7) into shape (10)
如果仔细观察,每个内部字典键值对中只有83个元素:

>>> len(input_dicts[0].keys())
83

>>> len(input_dicts[1].keys())
83
因此,当您试图覆盖
输入数组[i,:]
时,它会抛出一个值错误。

有多种方法可以填充阵列,使其成为所需的形状

>>> import numpy as np
>>> x = np.array([0,1,2,3])

>>> pad_left_column = 3
>>> pad_right_column = 2
>>> pad_top_row = 4
>>> pad_bottom_row = 5

>>> np.pad(x, [(pad_left_column, pad_right_column)], mode='constant')
array([0, 0, 0, 0, 1, 2, 3, 0, 0])
但我建议不要这样做,因为通常列的顺序有一定的意义,简单地填充零以使形状正确可能并不可取

TL;博士 检查
inputs\u dict
对象中的内容


长期 当您使用
np.zeros([x,y])
时,它返回一个由x行和y列组成的矩阵,其中填充了零值:

>>> import numpy as np
>>> np.zeros([3,10])
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
>>> np.zeros([3,10]).shape
(3, 10)
使用
范围(x,y)
时,它将返回一个从x开始到y-1结束的列表:

>>> list(range(0, 3))
[0, 1, 2]
这样做会用浮点列表覆盖numpy数组的一行:

numpy_array[i,:] = [0,1,2,3,4,5,6,7,8,9]
最初:

>>> inputs = np.zeros([3,10])

>>> inputs[0,:]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>> inputs[1,:]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>> inputs[2,:]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

>>> inputs
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
覆盖行:

>>> inputs = np.zeros([3,10])

>>> inputs[0,:] = [0,1,2,3,4,5,6,7,8,9]

>>> inputs[0,:]
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

>>> inputs
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
只要
输入[i,:]=[0,1,2,3,4,5,6,7,8,9]
的左右侧大小相同,就应该成功覆盖该行。否则你会在你的问题中发现同样的错误

>>> inputs[1,:] = [0,1,2,3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot copy sequence with size 4 to array axis with dimension 10
您希望将其放入左侧幻灯片的
input_array[i,:]=np.array(list(inputs_dict[i].values())

现在,如果我们在
输入[u dict['even-values']
中的值数量与左侧的值不匹配,您将遇到问题中的错误:

>>> inputs = np.zeros([3,10])

>>> inputs_dict = {'even-values': {1:2, 3:4, 5:6, 7:8, 9:10, 11:12, 13:14}}

>>> np.array(list(inputs_dict['even-values'].values()))
array([ 2,  4,  6,  8, 10, 12, 14])

# Right-side shape.
>>> np.array(list(inputs_dict['even-values'].values())).shape
(7,)

# Left-side shape.
>>> inputs[1,:].shape
(10,)

>>> inputs[1,:] = np.array(list(inputs_dict['even-values'].values()))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (7) into shape (10)
如果仔细观察,每个内部字典键值对中只有83个元素:

>>> len(input_dicts[0].keys())
83

>>> len(input_dicts[1].keys())
83
因此,当您试图覆盖
输入数组[i,:]
时,它会抛出一个值错误。

有多种方法可以填充阵列,使其成为所需的形状

>>> import numpy as np
>>> x = np.array([0,1,2,3])

>>> pad_left_column = 3
>>> pad_right_column = 2
>>> pad_top_row = 4
>>> pad_bottom_row = 5

>>> np.pad(x, [(pad_left_column, pad_right_column)], mode='constant')
array([0, 0, 0, 0, 1, 2, 3, 0, 0])

但我建议不要这样做,因为通常列的顺序有一定的意义,简单地填充零以使形状正确可能并不可取

输入中有什么内容?你能给我一个那个物体的样品吗?请…我猜一个dicts元素有84个术语,另一个有83个术语。确保您理解源代码。@Alv因为输入的输出已添加到主问题块中,如果你在做基因测序,并且
input\u dict
中的所有键都是相同的,那么你应该正确地将它们矢量化-\u-…input\u dict中有什么?你能给我一个那个物体的样品吗?请…我猜一个dicts元素有84个术语,另一个有83个术语。确保您理解源代码。@Alva由于输入[0:1]的输出已添加到主问题块中,因此输出非常大,无法放入单个注释中。如果您正在进行基因测序,并且
input\u dicts
中的所有键都相同,则应正确地将它们向量化-\u-…np.array(列表(inputs_dict[0].values())。例如,形状提供了预期的(83,)输出。但是,当更改初始化数组以适应将放入的数组大小时,错误是形状为(84,),它无视任何编程逻辑,看到字典或使用它生成的数组以任何方式、形状或形式发生了更改…很好的答案alavs:)np.array(list(inputs_dict[0].values())。例如,形状给出了预期的(83,)输出。然而,当更改初始化数组以适应将要放入的数组的大小时,给出的错误是形状为(84,