[英]Creating 2D array with values in python with values from another array
我正试图在 python 中更好地编码,但被困在一个相当标准的问题上。 我有一个给定的数组,需要创建一个双倍行的数组。 新数组应该以这样一种方式对应于原始数组,即新数组中的两行包含与原始数组中的一个值相同的值。 我正在使用 Python 3.7 和 numpy 数组。
例子:
original_array = [[1,2,3],
[4,5,6],
[7,8,9]]
result = [[1,2,3],
[1,2,3],
[4,5,6],
[4,5,6],
[7,8,9],
[7,8,9]]
有一种手动方法可以做到这一点:
result = np.zeros((original_array.shape[0]*2, original_array.shape[1]))
for i in range(result.shape[0]):
result[i]=original_array[i//2]
但是,由于我的应用程序处理非常大的数组,因此我尝试尽可能多地使用库函数。 经过一番搜索,我想出了以下内容:
result = np.fromfunction(lambda i,j: original_array[i//2][j],
(original_array.shape[0]*2, original_array.shape[1]),
dtype=int)
但是,此调用会生成一个 4D 数组,其中大部分值仅来自第一行,因此它显然无法按预期方式工作。
为什么这个调用会失败,我怎样才能达到想要的效果?
编辑:
我发现了呼叫失败的原因。 np.fromfunction(...) 不直接迭代索引,而是将它们作为数组提供。 当生成的数组与原始数组的大小不同时,原始数组对索引的访问不再以预期的方式工作。
使用 np.repeat(...) 作为 StupidWolf 建议的作品。
您可以使用 np.repeat:
np.repeat(original_array,2,axis=0)
array([[1, 2, 3],
[1, 2, 3],
[4, 5, 6],
[4, 5, 6],
[7, 8, 9],
[7, 8, 9]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.