NumPy_03_视图与拷贝

本文深入探讨了浅拷贝与深拷贝的概念,解释了两种拷贝方式的区别及应用场景。浅拷贝仅复制对象的第一层引用,而深拷贝则完全复制对象的所有层级,确保了数据独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)拷贝

1、浅拷贝:

对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。(如果其中一个变量的值改变,另外一个也会改变。)

(1)np.asarray(a, dtype=None, order=None)
在这里插入图片描述
(2)数组b = 数组a
在这里插入图片描述
2、深拷贝:

一个变量对另外一个变量的值拷贝,会开辟新的内存空间进行存储

特点:
(1)两个变量指向的内存地址不同
(2)拷贝完后,变量之间值的改变互不影响

ndarray.copy()
在这里插入图片描述

(二)视图

ndarray.view()
创建一个查看相同数据的新数组对象,新的数组与原数组之间数据变化相互影响

在这里插入图片描述

### to_numpy 方法的详细用法和解释 `to_numpy()` 是 Pandas 中的一个重要方法,主要用于将 `Series` 或 `DataFrame` 转换为 NumPy 数组。这种方法在数据科学、机器学习和数值计算领域非常有用,因为它允许我们利用 NumPy 高效的多维数组对象及其丰富的操作功能。 #### 方法定义 `to_numpy()` 的基本语法如下: ```python Series.to_numpy(dtype=None, copy=False, na_value=None) ``` 或者对于 `DataFrame`: ```python DataFrame.to_numpy(dtype=None, copy=False) ``` #### 参数详解 1. **dtype**: 可选参数,指定目标数据类型。如果未提供,则会自动推断数据类型[^2]。 2. **copy**: 布尔值参数,默认为 `False`。它决定了返回的 NumPy 数组是否是一个独立的副本还是原数据的视图。需要注意的是,即使设置为 `False`,也不一定能保证无复制行为发生;而当设为 `True` 时,则强制创建一个新的副本[^5]。 3. **na_value**: 对于 `Series` 类型有效,用于替代缺失值(如 NaN)。如果没有特别指明该参数,则默认保持原有的缺失值不。 #### 示例代码及解析 以下是几个具体的例子来演示如何使用 `to_numpy()` 方法: ##### 示例 1: 基础转换 下面展示了最简单的场景——把一个普通的 Pandas Series 转换成 NumPy 数组。 ```python import pandas as pd s = pd.Series([10, 20, 30]) array = s.to_numpy() print(array) # 输出:[10 20 30] ``` 这里没有任何额外选项被启用,因此直接得到了原始序列对应的纯数字形式的一维 NumPy 数组。 ##### 示例 2: 数据类型的显式声明 有时我们需要确保最终得到的结果具有特定的数据精度或格式,在这种情况下就可以通过设定 `dtype` 来实现这一点。 ```python df = pd.DataFrame({'Numbers': [1., 2., 3.]}) result = df['Numbers'].to_numpy(dtype='int') print(result) # 输出:[1 2 3] ``` 在这个实例里,尽管源数据是以浮点数的形式存储的,但我们成功将其转化为整数类型的数组[^3]。 ##### 示例 3: 缺失值处理 当我们面对含有空缺项的数据集时,可以通过调整 `na_value` 参数来自定义这些特殊位置的表现方式。 ```python series_with_nan = pd.Series([1, float('nan'), 3]) converted_array = series_with_nan.to_numpy(na_value=0) print(converted_array) # 输出:[1 0 3] ``` 上述片段表明所有的 NaN 已经被零所取代[^2]。 ##### 示例 4: 复制控制 最后来看一下关于拷贝机制的部分。假设存在某种情况要求我们必须获得完全分离的新实体而不是共享底层缓冲区的话,那么就需要明确指出这个需求。 ```python original_series = pd.Series([7, 8, 9]) new_copy = original_series.to_numpy(copy=True) # 修改原始系列不会影响新生成的数组 original_series.iloc[0] = -1 print(new_copy) # 输出仍然是:[7 8 9] ``` 此部分强调了即便基础结构发生化也不会波及到已经提取出来的单独个体[^5]。 ### 总结 综上所述,`to_numpy()` 不仅提供了便捷途径让开发者能够轻松切换至更强大的运算环境之中,同时还赋予他们足够的灵活性去定制化输出特性以满足不同应用场景下的具体需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值