【发布时间】:2021-12-12 13:01:36
【问题描述】:
numpy.asarray() 有一个问题,当我处理大量数组时,它无法正确地将数组列表转换为矩阵。例如,使用numpy.asarray() 的六个数组的列表(每个数组的长度为(5000,)),它可以转换为(6,5000)的矩阵,这就是我需要的,但是当我使用 1285数组,numpy只是不生成(1285,5000)的矩阵,而是留下(1285,)长度的列表,这是怎么回事?贴出代码和例子来更好的解释,主要部分有问题:
ecg_filenames_train_gridsearch=ecg_filenames[folds[0][1]]
ecg_train_timeseries=[]
for names in ecg_filenames_train_gridsearch:
data, header_data = pc.load_challenge_data(names,'I')
data = data[:5000]#truncate arrays to a max length of 5000
ecg_train_timeseries.append(data)
X_train_gridsearch = np.asarray(ecg_train_timeseries)
X_train_gridsearch = X_train_gridsearch.reshape(ecg_filenames_train_gridsearch.shape[0],5000,1)#Here I get a
ValueError: cannot reshape array of size 1285 into shape (1285,5000,1)
我用少量数据进行的测试(6 个一维数组,每个数组的长度为 (5000)):
print(X_train_gridsearch)
RESULT:
[[ 24. 24. 29. ... 24. 24. 24.]
[4302. 4136. 3999. ... 3897. 3880. 3893.]
[ -35. -35. -35. ... -40. -40. -40.]
[-245. -243. -242. ... -146. -134. -128.]
[-474. -444. -456. ... -410. -453. -458.]
[ 28. 39. 45. ... -310. -361. -403.]]
print(X_train_gridsearch.shape)
(6,5000)
使用我需要使用的所有数据进行测试(1285 个一维数组,每个数组的长度为 (5000,)):
print(X_train_gridsearch)
RESULT:
[array([88., 88., 87., ..., 8., 9., 10.])
array([43., 58., 44., ..., -5., 3., 0.])
array([-8., -9., -8., ..., -9., -8., -8.]) ...
array([-30., -30., -30., ..., -50., -50., -50.])
array([ 205., 205., 205., ..., -120., -120., -120.])
array([ -40., -40., -40., ..., -110., -110., -110.])]
print(X_train_gridsearch.shape)
(1285,)
在第一种情况下,np.asarray() 将数组从数组列表转换为矩阵,但在第二种情况下,它只是保持array[] 格式,有什么问题?希望你能帮助我。
【问题讨论】:
-
试试
np.stack(ecg_train_timeseries) -
你验证过所有数组的长度都是5000吗?如果偶数一个的长度小于 5000,您将获得一维对象数组而不是二维数组。
-
@hpaulj 我会试试的
-
@WarrenWeckesser 和
data = data[:5000]我将所有数组截断为 5000 的长度,但我也会验证这一点。 -
如果您知道所有输入数组的长度至少为 5000,则该方法有效。如果输入数组的长度为 4997,则
data[:5000]不会产生错误,而是会返回一个数组长度为 4997。
标签: python arrays python-3.x numpy multidimensional-array