Python 【问题描述】将形如n*m的矩阵,扩展为2n*2m的形式

【问题描述】将形如nm的矩阵,扩展为2n2m的形式,如下图所示。

在这里插入图片描述

【输入形式】元素均为整型的矩阵,保存在文本文件中。
【输出形式】扩展后的矩阵,保存在文本文件中。
【样例输入】

1,2,3

4,5,6

【样例输出】

1,2,3,1,2,3

4,5,6,4,5,6

1,2,3,1,2,3

4,5,6,4,5,6

【样例说明】23的矩阵,扩展成46的矩阵。

依据题意,意思是要将读取的矩阵沿X、Y轴复制(扩展)两次
应当使用np.tile()函数,可以以整个数组的形式复制,注意:重塑可能比较繁琐,np的repeat()函数是对于每个元素的复制有所区别。例如:
示例arr原数组
在这里插入图片描述
repeat函数
在这里插入图片描述
tile函数
在这里插入图片描述
以上就可以看出区别了,tile里的元组((2,2))也可以用列表([2,2])表示沿XY轴都复制两次,默认为沿X轴,当然,也叫沿列的方向和行的方向

故而题目的实现代码为:

import  numpy  as  np
data  =  np.loadtxt('data2.txt',delimiter=',')
result = np.tile(data,(2,2))
np.savetxt('resultarr.txt',result,fmt='%d',delimiter=',')

当然,还可以用拼接函数concatenate、hstack、vstack,应该是使用到循环吧。

测试一下:

import numpy as np
data  =  np.loadtxt('data2.txt',delimiter=',')
result = []
res1 = data
shape_data = data.shape     #获取维度
x = int(shape_data[0])   #定义列(X轴)题目是默认2,下面就使用2,这里是为了说明能够怎么拼接
y = int(shape_data[1])   #定义行(Y轴)

#以下是本题目的代码
for i in range(1):
    res1 = np.concatenate((res1,data),axis = 1)   #使用了concatenate拼接函数

res2 = res1    
for i in range(1):
    res2 = np.concatenate((res1,res2),axis = 0)

result = res2

以上代码并没有作出优化,自然有其他的办法,仅供参考啦~
本题目就不需要那个循环来行向或者列向的拼接

猜你喜欢

转载自blog.csdn.net/missionnn/article/details/120895612
今日推荐