numpy的数组维度问题

  由于之前写c++的时候大多用的是小于3维的数组,所以看到python中numpy的高维array(数组),层层叠叠的[]感觉把眼都看花了。 现在让我们睁大眼睛,仔细看看到底是怎么回事。
举例说明:

>>>x1 = np.array([[1,2,3],[4,5,6]])
>>>x1.shape
>>>(2,3)
>>>x2 = np.array([[[0],[1],[2]]])
>>>x2.shape
>>>(1,3,1)

  中括号虽然看的人眼花,但仔细分析很快就会看明白了。拿第一个例子来说,我们把数字忽略,把中括号和逗号提取出来,得到:

[   [ ,,,] ,  [ ,,,]   ]

这样的结构,这下就明了了,第一个中括号里面有用逗号分开的两个并列的中括号,说明第一个维度有两个元素,所以是2,而更深层次的中括号里面没有了中括号,而是三个逗号,说明是三个并列的元素,所以是3.所以输出(2,3),同理可知,x2为(1,3,1)

### NumPy 数组维度概念及操作详解 #### 什么是NumPy数组维度NumPy中的`ndarray`是一个多维数组对象,其核心特性之一就是支持多种维度据结构。数组维度通常被称为轴(axis),其中一维数组只有一个轴(axis=0),二维数组有两个轴(axis=0 和 axis=1),以此类推。 对于任意一个NumPy数组,可以通过`.shape`属性获取它的形状,通过`.ndim`属性获取它的维度[^2]。 ```python import numpy as np arr_1d = np.array([1, 2, 3]) print(f"一维数组 shape: {arr_1d.shape}, ndim: {arr_1d.ndim}") arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) print(f"二维数组 shape: {arr_2d.shape}, ndim: {arr_2d.ndim}") ``` #### 如何创建不同维度NumPy数组? 可以从Python列表或元组创建NumPy数组,也可以利用NumPy内置函来生成特定模式的数组[^3]。 - **从列表/元组创建** ```python arr_from_list = np.array([1, 2, 3]) # 一维数组 nested_list_array = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组 ``` - **使用NumPy内置函** - `np.zeros()`:创建指定形状的零填充数组。 - `np.ones()`:创建指定形状的一填充数组。 - `np.full()`:创建指定形状并填充值的数组。 - `np.arange()`:类似于Python的`range()`函,返回等差序列。 ```python zeros_arr = np.zeros((3, 4)) # 形状为(3, 4)的全零矩阵 ones_arr = np.ones((2, 2)) # 形状为(2, 2)的全一阵列 full_arr = np.full((2, 3), 7) # 填充值为7的数组 range_arr = np.arange(0, 10, 2) # 范围从0到10步长为2的一维数组 ``` #### 数组维度的操作方法 ##### 改变数组形状 可以使用`.reshape()`方法改变数组的形状而不改变据。 ```python original_array = np.array([[1, 2, 3], [4, 5, 6]]) reshaped_array = original_array.reshape(3, 2) print("Reshaped Array:\n", reshaped_array) ``` ##### 合并与分割 - **合并**:可使用`np.concatenate()`、`np.vstack()`、`np.hstack()`等函沿某个轴连接多个数组[^1]。 ```python array_a = np.array([[1, 2], [3, 4]]) array_b = np.array([[5, 6]]) concatenated_array = np.concatenate((array_a, array_b.T), axis=1) print("Concatenated Array:\n", concatenated_array) ``` - **分割**:对应有`np.split()`、`np.hsplit()`和`np.vsplit()`等功能用于按条件拆分数组。 ```python split_arrays = np.split(original_array, indices_or_sections=[1], axis=0) print("Split Arrays:", split_arrays) ``` ##### 广播机制 当执行算术运算时,如果两个数组的形状不完全相同,则会应用广播规则使它们兼容[^4]。 ```python a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10]) result = a + b print("Broadcasting Result:\n", result) ``` #### 据类型转换与其他操作 有时需要在NumPy数组和其他库的对象之间互相转化,比如与PyTorch张量间的互转[^5]。 ```python tensor = torch.tensor([1., 2., 3.]) numpy_array = tensor.numpy() pytorch_tensor_back = torch.from_numpy(numpy_array) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值