Python 使用多个数组更改列表的形状
最初,我有一个名为Python 使用多个数组更改列表的形状,python,list,shapes,training-data,cnn,Python,List,Shapes,Training Data,Cnn,最初,我有一个名为voltage的字典,其中有206个数组,每个数组的形状(25,3,1)。我使用以下代码将字典转换为数组列表 temp = [] input= [] for value, key in voltage.items(): temp = [key,value] input.append(temp) input是我列表的名称。当我检查列表的形状时,我得到(1206,2) 我想将列表的形状更改为(206,25,3,1)。当我将输入传递到以下模型时,我得到一个错误(附
voltage
的字典,其中有206个数组,每个数组的形状(25,3,1)
。我使用以下代码将字典转换为数组列表
temp = []
input= []
for value, key in voltage.items():
temp = [key,value]
input.append(temp)
input
是我列表的名称。当我检查列表的形状时,我得到(1206,2)
我想将列表的形状更改为(206,25,3,1)
。当我将输入
传递到以下模型时,我得到一个错误(附在下面)
ValueError:检查输入时出错:预期输入_5有4
维度,但获得了具有
(1206,2)形状
非常感谢您的帮助。您可以执行以下操作:
import numpy as np
d = {1: np.random.rand(25, 3, 1),
2: np.random.rand(25, 3, 1),
3: np.random.rand(25, 3, 1),
4: np.random.rand(25, 3, 1)}
arr = np.empty((len(d.keys()), *d[1].shape))
for i, k in enumerate(d.keys()):
arr[i] = d[k]
print(arr.shape) # (4, 25, 3, 1)
以所需大小创建一个空的numpy
数组,然后将dict、volatge
值附加到所需位置
如果您的按键不规则(表示1、4、6等),您可以创建一个映射,将
arr
的第一个条目映射到voltage
值。一些注释:一个大小的数组(N、3、1)似乎没有意义,您可能应该将最后一个级别变平并使其具有形状(N、3):[[0]、[1]、[2]、[1]、[2]、[3]],[2],[3],[4],…]
->[0,1,2],[1,2,3],[2,3,4],…]
。另外,开始时键和值的顺序似乎不正确:对于键,电压中的值。items():
按照您的步骤,np.shape(input)
返回(206,2)
而不是(1206,2)
非常感谢@David。成功了。请分享一个链接,如果有的话,在那里我可以得到与此相关的文档。我想知道更多关于这方面的情况。谢谢您:D@PradyumnaTK关于什么的文档?numpy数组?关于将字典转换为列表、数组等,并访问其中的项。如果有,请分享。要不然就好了,我去看看:)@David@PradyumnaTK它没有“来源”,主要是实践。
K = Input(shape=(25,3,1))
x = Conv2D(16,(2,2), strides=2, activation='relu', data_format='channels_last', padding='same')(K)
x = BatchNormalization()(x)
x = Conv2D(32,(2,2), activation='relu', data_format='channels_last' , padding='same')(x)
x = BatchNormalization()(x)
x = Flatten()(x)
x = Dense(320, activation='relu')(x)
x = Dense(160, activation='relu')(x)
x = Dense(80, activation='relu')(x)
x = Dense(1)(x)
model = Model(K,x)
model.compile(optimizer='adam',loss='mse')
model.fit(x=input, y=output, steps_per_epoch=None, epochs=1000)
import numpy as np
d = {1: np.random.rand(25, 3, 1),
2: np.random.rand(25, 3, 1),
3: np.random.rand(25, 3, 1),
4: np.random.rand(25, 3, 1)}
arr = np.empty((len(d.keys()), *d[1].shape))
for i, k in enumerate(d.keys()):
arr[i] = d[k]
print(arr.shape) # (4, 25, 3, 1)