本篇文章主要探讨了Python科学计算库NumPy中的两个重要函数`np.array()`和`np.asarray()`之间的区别,并介绍了`.tolist()`方法的功能及其应用场景。适合需要深入理解NumPy数组创建方式的读者阅读。
`array` 和 `asarray` 都可以将结构化数据转换为 NumPy 的 ndarray 类型。但是两者的主要区别在于:当输入的数据已经是 ndarray 时,使用 `array()` 方法会创建一个新的副本并占用新的内存空间;而使用 `asarray()` 则不会生成新副本。
在以下示例中:
1. 当输入是列表时:
```python
a = [[1,2,3],[4,5,6],[7,8,9]]
b = np.array(a)
c = np.asarray(a)
# 更改原始列表中的值
a[2] = 1
print(a) # 输出:[[1, 2, 3], [4, 5, 6], [1]]
print(b) # 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(c) # 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
```
我们可以看到,无论是使用 `np.array()` 还是 `np.asarray()` ,都会将输入列表转换为矩阵格式。而且当原始的列表被修改时,并不会影响到已经转化为 ndarray 的值。
2. 当输入已经是数组的时候:
```python
a = np.random.random((3, 4))
```
在这种情况下,使用`array()` 和 `asarray()` 方法的具体行为会有所不同:如果 a 已经是 ndarray 类型,则调用 `np.asarray(a)` 将不会创建新的副本。而使用 `np.array(a)` 则会产生一个新的数组对象占用额外的内存空间。
因此,在处理已存在的 NumPy 数组时,为了避免不必要的资源消耗,请优先考虑使用`asarray()` 方法。