如何从NumPy数组构建ndarray?Python

15

我似乎无法在Numpy中将它转换为ndarray,我已阅读http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html ,但它没有向我展示如何将我的输入数据(如下所示)转换为ndarray

如何从NumPy数组或整数列表的列表构造ndarray? * ndarray和array之间有什么区别?* 我可以只使用array类型,对吧?

我有一个像这样的整数计数列表

[[1, 2, 4, 1, 5],
 [6, 0, 0, 0, 2],
 [0, 0, 0, 1, 0]]

我成功使用了这段代码创建了一个 np.array,如 http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html#numpy.array 所示。

import numpy as np
x = [[1, 2, 4, 1, 5],
 [6, 0, 0, 0, 2],
 [0, 0, 0, 1, 0]]
print np.array(x)

[out]:

[[1 2 4 1 5]
 [6 0 0 0 2]
 [0 0 0 1 0]]

但是我不能用这段代码将它转换成np.ndarray

import numpy as np
x = [[1, 2, 4, 1, 5],
[6, 0, 0, 0, 2],
[0, 0, 0, 1, 0]]
print np.ndarray(x)

我遇到了一个错误:

Traceback (most recent call last):
  File "/home/alvas/workspace/sklearntut/test.py", line 7, in <module>
    print np.ndarray(x)
TypeError: an integer is required

我该如何使用整数计数的列表创建一个 np.ndarray? TypeError 中指的是哪个整数?


2
ndarray和array之间没有区别。 - flonk
3个回答

48

ndarray是NumPy数组。

>>> x = np.array([1, 2, 3])
>>> type(x)
<type 'numpy.ndarray'>
np.ndarraynp.array之间的区别在于前者是实际类型,而后者是从其他格式的数据构建数组的灵活简写函数。 TypeError发生在您将np.array参数用于np.ndarray时,因为它需要完全不同的参数(请参阅文档字符串)。

10

虽然接受的回答是正确的,但这并没有帮助我实际创建一个一维数组的数组。

由于这个线程在谷歌上是第一个答案,所以我发布我的解决方案,即使它不是一个优雅的解决方案(请不要犹豫告诉我其中有一个):

import numpy as np

# Create example array
initial_array = np.ones(shape = (2,2))

# Create array of arrays
array_of_arrays = np.ndarray(shape = (1,), dtype = "object")
array_of_arrays[0] = initial_array

请注意,array_of_arrays 在这种情况下是可变的,即更改 initial_array 会自动更改 array_of_arrays

请注意,array_of_arrays 在此情况下是可变的,即更改 initial_array 会自动更改 array_of_arrays


还有另一种方法可以增加一个维度,您可以使用 numpy.expand_dims,例如:np.expand_dims(initial_array, axis=0) - taras
那么为什么 np.ndarray(x) 没有起作用呢?np.ndarray 和 np.array 的第一个参数都是形状。 - NoName

2
我将接受的解决方案与修复后的代码结合起来。 正如接受的解决方案所说,ndarray 是 NumPy 的一个 数组
这基本上意味着,当从一个列表的列表、元组的列表或列表的元组构建一个 ndarray 时,你应该使用 np.array
修复后的代码片段为:
import numpy as np
x = [[1, 2, 4, 1, 5],
[6, 0, 0, 0, 2],
[0, 0, 0, 1, 0]]

# The difference: we call np.array
print np.array(x)

希望这能对其他人有所帮助,因为这是谷歌的第一个答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接