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]]

你可能感兴趣的:(python使用)