【问题标题】:issues storing and extracting arrays in numpy file在 numpy 文件中存储和提取数组的问题
【发布时间】:2018-06-29 02:20:30
【问题描述】:

尝试将数组存储在 numpy 文件中,但在尝试提取并使用它时,在尝试将数组应用于序列时收到错误消息。

这是两个数组,不确定是哪一个导致了问题。

X = [[1,2,3],[4,5,6],[7,8,9]]
y = [0,1,2,3,4,5,6....]

在尝试检索它并使用它获取值时:

X: array(list[1,2,3],list[4,5,6],list[7,8,9])
y = array([0,1,2,3,4,5...])

代码如下:

vectors = np.array(X)
labels = np.array(y)

在 t-sne 上检索工作时

visualisations = TSNE(n_components=2).fit_transform(X,y)

我收到以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-11-244f99341167> in <module>()
----> 1 visualisations = TSNE(n_components=2).fit_transform(X,y)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\manifold\t_sne.py in fit_transform(self, X, y)
    856             Embedding of the training data in low-dimensional space.
    857         """
--> 858         embedding = self._fit(X)
    859         self.embedding_ = embedding
    860         return self.embedding_

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\manifold\t_sne.py in _fit(self, X, skip_num_points)
    658         else:
    659             X = check_array(X, accept_sparse=['csr', 'csc', 'coo'],
--> 660                             dtype=[np.float32, np.float64])
    661         if self.method == 'barnes_hut' and self.n_components > 3:
    662             raise ValueError("'n_components' should be inferior to 4 for the "

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    431                                       force_all_finite)
    432     else:
--> 433         array = np.array(array, dtype=dtype, order=order, copy=copy)
    434 
    435         if ensure_2d:

ValueError: setting an array element with a sequence.

【问题讨论】:

  • 您还没有向我们展示用于存储和读取 NumPy 文件的重要代码。你能和我们分享一下吗?
  • 确保在保存前显示Xreprstr 提供更多信息)。还有你好吗extractingusing。显示产生错误消息的确切代码(如果适用,使用traceback)。

标签: python-3.x numpy numpy-ndarray


【解决方案1】:

假设我对您的理解正确,您需要将第一组打包到列表中;像这样:

import numpy as np

#X = [[1,2,3],[4,5,6],[7,8,9]]
#y = [0,1,2,3,4,5,6, 7, 8, 9]

X = np.array([[1,2,3],[4,5,6],[7,8,9]])
y = np.array([0,1,2,3,4,5, 6, 7, 8, 9])

【讨论】:

    【解决方案2】:
    array(list[1,2,3],list[4,5,6],list[7,8,9])
    

    是一维对象 dtype 数组。从

    [[1,2,3],[4,5,6],[7,8,9]]
    

    需要超过np.array([[1,2,3],[4,5,6],[7,8,9]]);要么列表元素的大小不同,要么您必须初始化一个对象数组并将列表值复制到其中。

    无论如何fit_transform 无法处理这种数组。它需要一个 2d 数字 dtype。注意check_array 函数的参数。

    如果X的所有列表元素大小相同,那么

    X = np.stack(X)
    

    应该把它变成一个二维数值数组。

    我怀疑X 是保存前的一维对象数组类型。 save/load 本身不应将二维数值数组转换为对象。

    【讨论】:

    • 嗨,我试过你的选项,'X = np.stack(X)' 然后我得到一个错误:'ValueError: all input array must have the same shape'
    • 这意味着,与您的示例相反,X 中的列表大小不同。这就解释了为什么 X 是对象 dtype。它不能从一个参差不齐的列表列表中创建一个二维数组。在使用 sklearn 之前,您必须解决这个可变长度问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多