是否有可能实现populate
它使用insert
而不是insert1
?对于大型数据集,我收到服务器超时错误,因为使用insert1
需要数小时来填充表。这是我的目的:
def make(self, key):
keys = Session.fetch('KEY') # get the primary key(s) from session .fetch('KEYS') for multiple
filename = 'data/AJ0{mouse_id}_{session_id}'.format(**key) # get the filename of the session you are interested in
mat = spio.loadmat(filename, squeeze_me=True,struct_as_record=False) #load the data in .mat format
data = mat[list(mat)[-1]] # unpack the dictionaries to select the specific data
activity_arr = data.deResp
n_trials, n_neuron = activity_arr.shape
for neuro_id in range(0, n_neuron):
for trial_id in range(0, n_trials):
key['neuro_id'] = neuro_id
key['activity'] = activity_arr[trial_id, neuro_id]
self.insert1(Key, skip_duplicates=True)
我想要的是这样的
for neuro_id in range(0, n_neuro):
key['neuro_id'] = np.asarray([neuro_id]*n_trials)
key['activity'] = activity_arr[0:n_trials,neuro_id]
self.insert(key, skip_duplicates=True)
有点插入字典列表并能够调用填充方法。有什么建议么?
过去,我实现了下面的 make 函数,但是使用这个函数我无法调用 populate 。
def make(self):
activity_arr = data.deResp
n_trials, n_neuron = activity_arr.shape
for neuro_id in range(0, n_neuron):
trial_ids = np.arange(0,n_trials)
mouse_id = np.asarray([self.mouse_id]*n_trials)
neuro_ids = np.asarray([neuro_id]*n_trials)
sess = np.asarray([self.session_id]*n_trials)
acts=activity_arr[0:n_trials,neuro_id]
arr=np.vstack((mouse_id,sess,trial_ids,neuro_ids,acts)).T
self.insert(list(arr), skip_duplicates=True)