【问题标题】:Why numpy.asarray() doesn't work properly with large number of arrays?为什么 numpy.asarray() 不适用于大量数组?
【发布时间】: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


【解决方案1】:

我解决了将这行代码添加到我的代码:

if data.shape<(5000,):
    a = np.resize(data,(5000,))
    data = a

.append()之前,谢谢大家和Warren。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2021-10-31
    相关资源
    最近更新 更多