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