python numpy.ndarray reshape()函数

numpy.ndarray.reshape()函数

reshape()函数会重新定义一个矩阵的形状。
假设,我有一个一维矩阵,长度为m:
[a,b,c,d,…]

不论我将其reshape成几维矩阵,必须满足所有维度的个数乘积为m。
假设,我有100长的一个矩阵。我可以做如下切分:
10x10
10x2x5
但不管如何乘积必须是100。

假设100长的数组要切分成10,2,5。我们应该先将100个元素切分成10份,然后再对每一份切分成2份,然后再对每一份切分成5份。看维度需要从最外层的括号开始看起。

a = np.arange(100)
a.reshape((10,2,5))

所以,当我想把该矩阵继续reshape为(10,10)的时候,我可以这样写:

a.reshape(10,-1)

这里的-1表明,当我需要一个二维矩阵的时候,我只要规定好有多少行就ok,而不用去管每一行的个数。其实这里的-1就是通过100除以10所得到的。
所以,上面的代码还可以写成:

a = np.arange(100)
a.reshape((10,2,-1))

实例:
新建一个.txt文档,将一下内容复制其中:

0;3781;1150;3900;1150;3900;1152;3782;1154;800X;
0;3698;1153;3743;1152;3743;1155;3698;1156;800X;
0;3443;1124;3550;1120;3676;1119;3677;1122;3551;1124;3448;1127;800X;
0;3779;1119;3903;1118;3903;1116;3780;1117;800X;
0;3700;1119;3749;1118;3749;1120;3700;1122;800X;
0;2315;1033;2364;1047;2428;1066;2427;1052;2314;1024;8040;

代码:读取每一行,并提取成(x,y)形式的左边点

filepath = "C:/Users/.../***.txt"
with open(filepath, "r") as file:
    for line in file:
        nums = line.split(';')
        vertices = np.asarray(nums[1:-2], dtype=int)
        print("vertices1: " vertices)
        nvertices = len(vertices) / 2
        assert np.mod(nvertices, 1) == 0
        vertices = vertices.reshape(int(nvertices), -1)

        print("vertices2: " vertices)

输出:
vertices1: [3781 1150 3900 1150 3900 1152 3782 1154]
vertices1: [3698 1153 3743 1152 3743 1155 3698 1156]
vertices1: [3443 1124 3550 1120 3676 1119 3677 1122 3551 1124 3448 1127]
vertices1: [3779 1119 3903 1118 3903 1116 3780 1117]
vertices1: [3700 1119 3749 1118 3749 1120 3700 1122]
vertices1: [2315 1033 2364 1047 2428 1066 2427 1052 2314 1024]


vertices2:  [[3781 1150]
			[3900 1150]
			[3900 1152]
			[3782 1154]]
			
vertices2:  [[3698 1153]
			 [3743 1152]
			 [3743 1155]
			 [3698 1156]]
			 
vertices2:  [[3443 1124]
			 [3550 1120]
			 [3676 1119]
			 [3677 1122]
			 [3551 1124]
			 [3448 1127]]
			 
vertices2:  [[3779 1119]
			 [3903 1118]
			 [3903 1116]
			 [3780 1117]]
 
vertices2:  [[3700 1119]
			 [3749 1118]
			 [3749 1120]
			 [3700 1122]]
 
vertices2:  [[2315 1033]
			 [2364 1047]
			 [2428 1066]
			 [2427 1052]
			 [2314 1024]]

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 NumPy 中,要增加一个维度,可以使用 reshape() 方法。reshape() 方法用于改变 ndarray 的形状,可以将数组从一个原始的形状转换为所需的新形状。 假设有一个形状为 (3, 4) 的二维数组 arr: ``` import numpy as np arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr.shape) # 输出 (3, 4) ``` 现在我们想要在 arr 的维度上增加一个维度。可以使用 reshape() 方法,并传入新的形状作为参数,指定新的维度: ``` new_arr = arr.reshape((1, 3, 4)) print(new_arr.shape) # 输出 (1, 3, 4) print(new_arr) ``` 这样,arr 就被转换为一个三维数组,新的形状为 (1, 3, 4)。 如果不确定数组的原始形状,可以使用 -1 表示未确定的维度大小,NumPy 会自动计算未指定的维度大小。例如,将 arr 转换为形状为 (1, -1, 4) 的三维数组,可以这样写: ``` new_arr = arr.reshape((1, -1, 4)) print(new_arr.shape) # 输出 (1, 3, 4) print(new_arr) ``` 通过使用 reshape() 方法,我们可以轻松将 ndarray 增加到所需的维度。 ### 回答2: 要给一个`numpy.ndarray`增加一维,可以使用`numpy.newaxis`关键字或`numpy.expand_dims`函数。 方法一:使用`numpy.newaxis`关键字 `numpy.newaxis`可以增加一个新的轴。我们可以将其插入现有数组的特定位置,从而增加一维。 ```python import numpy as np # 创建一个一维数组 arr = np.array([1, 2, 3, 4, 5]) # 使用`numpy.newaxis`增加一维,放在行的位置 new_arr = arr[:, np.newaxis] print(new_arr) ``` 输出: ``` [[1] [2] [3] [4] [5]] ``` 方法二:使用`numpy.expand_dims`函数 `numpy.expand_dims`函数可以在特定位置增加一个新的轴。 ```python import numpy as np # 创建一个一维数组 arr = np.array([1, 2, 3, 4, 5]) # 使用`numpy.expand_dims`函数增加一维,放在行的位置 new_arr = np.expand_dims(arr, axis=1) print(new_arr) ``` 输出: ``` [[1] [2] [3] [4] [5]] ``` 无论是`numpy.newaxis`还是`numpy.expand_dims`,都可以实现给`numpy.ndarray`增加一维。具体选择哪种方式取决于个人习惯和需求。 ### 回答3: 要将 numpy.ndarray 增加一维,可以使用 numpy.newaxis 或 reshape() 函数。这两个方法都可以在现有数组的某个轴上增加一个长度为 1 的新维度。 使用 numpy.newaxis,可以通过在对应的轴上使用 None 来实现增加维度的操作。例如,假设有一个形状为 (3, 4) 的数组 a: a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) 要在第二维度上增加一维,可以将 None 插入到对应的位置: b = a[:, np.newaxis, :] 这样,b 的形状将变为 (3, 1, 4),即在第二维度上增加了一维。 另外,也可以使用 reshape() 函数来实现增加维度的操作。例如,要在原数组 a 的第一维度上增加一维,可以使用 reshape(): b = a.reshape(-1, 3, 4) 这里的 -1 表示根据数组元素的总数和已知的维度大小推断出缺失维度的大小。这样,b 的形状也将变为 (1, 3, 4),即在第一维度上增加了一维。 无论是使用 numpy.newaxis 还是 reshape() 函数,在增加维度后都可以进行进一步的操作,如切片、索引或执行其他 numpy 操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值