我的目标数组看起来像这样:
array([[[0.77777778],
[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]],
[[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]],
[[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.77777778]]])
我正在接收以下数组:
array([array([[0.77777778],
[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]]),
array([[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]]),
array([[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.77777778]])], dtype=object)
我可以做什么样的数据操作来实现这一点?
由于某种原因,Google Colab将序列正确地附加到第一个数组,然后为第二个数组创建数组对象的数组,创建数组的代码是相同的。它把第二个数组当作我运行了np。分割生成一个数组对象的数组。
下面是生成上述数组的代码:def walk_forward_train(X, stepsBack, stepsForward, trainTestSplit):
n_records = len(X)
X = X[:]
split = int(n_records*trainTestSplit-stepsForward)
x = []
y = []
for i in range(n_records):
x.append(X[i : i + stepsBack])
y.append(X[i + stepsBack : i + stepsBack + stepsForward])
xtrain = x[:split]
ytrain = y[:split]
xtest = x[: n_records - stepsForward]
ytest = y[: n_records - stepsForward]
return np.asarray(xtrain), np.asarray(ytrain), np.asarray(xtest), np.asarray(ytest)
编辑:这里有一个链接,我做了一个Github重建这个问题:https://github.com/Crayfi/Datasets
your_old_array = array([array([[0.77777778],
[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]]),
array([[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]]),
array([[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.77777778]])], dtype=object)
req_array = your_old_array.astype(np.float64)
Try
np.asarray(your_old_array)
输出:
array([[[0.77777778],
[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]],
[[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]],
[[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.77777778]]], dtype=object)
注意确保copy-n-paste生成一个包含3个元素的对象数组:
In [383]: array=np.array
In [384]: list=[array([[0.77777778],
...: [0.77777778],
...: [0.77777778],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333]]),
...: array([[0.77777778],
...: [0.77777778],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333]]),
...: array([[0.77777778],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333],
...: [0.83333333],
...: [0.77777778]])]
创建一个包含3个元素的对象数组,并从列表中填充它:
In [385]: arr = np.empty(3,object)
In [386]: arr[:] = list
In [387]: arr
Out[387]:
array([array([[0.77777778],
[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]]),
array([[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]]),
array([[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.77777778]])], dtype=object)
这是一个一维数组,所有元素数组的形状相同。stack
将工作:
In [388]: np.stack(arr)
Out[388]:
array([[[0.77777778],
[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]],
[[0.77777778],
[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333]],
[[0.77777778],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.83333333],
[0.77777778]]])
如果stack
不像这样工作,那么您没有向我们展示真正的数组。事实上,我看了看笔记本,你只显示了[:3],没有显示告诉我们。你试图把它当作整个数组来传递!
从笔记本显示器复制:
In [41]:
np.array(X_test)[:3]
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:1: VisibleDeprecationWarning:
Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or
ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify
'dtype=object' when creating the ndarray
"""Entry point for launching an IPython kernel.
这就是我一直想告诉你的,X_test
中的数组并不都具有相同的形状。