【发布时间】:2018-10-25 00:41:41
【问题描述】:
我正在尝试使用迭代过程从现有 2D NumPy 数组中的值构造 2D NumPy 数组。使用普通的 python 列出我所描述的过程如下所示:
coords = #data from file contained in a 2D list
d = #integer
edges = []
for i in range(d+1):
for j in range(i+1, d+1):
edge = coords[j] - coords[i]
edges.append(edge)
但是,NumPy 数组施加了不允许上述过程的限制。下面我尝试使用 NumPy 数组来做同样的事情,应该立即清楚问题出在哪里:
coords = np.genfromtxt('Energies.txt', dtype=float, skip_header=1)
d = #integer
#how to initialize?
for i in range(d+1):
for j in range(i+1, d+1):
edge = coords[j] - coords[i]
#how to append?
因为 NumPy 数组不存在 .append,所以我需要依赖连接或堆栈。但是这些函数旨在加入现有的数组,在我的循环的第一次迭代之后,我没有任何东西可以连接或堆叠。所以我想我需要改变我的数据流,但我不确定如何去做。
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
为什么不坚持你的第一个代码,然后做
edges_arr = np.asarray(edges)? -
因为我必须手动解析我的坐标文件,而不是使用 numpy.genfromtxt。此外,我必须对边数组和坐标数组中的值进行计算,所以我希望与我的容器保持一致。
-
好吧,我们需要一个minimal reproducible example,其中包含可重现的代码和输出,让您清楚地知道您要做什么。您现在拥有的是不完整的代码和修复它的请求。
-
迭代构建数组有两种合理的方式。 1) 从列表中创建数组,2) 初始化一个大小合适的
zeros数组,并迭代地设置“行”值。不要试图将数组压缩到列表模型中。 -
coords是一个 (m,n) 数组。看起来您想要获取行之间的所有差异,生成 (m,m,n) 数组。唯一特别的事情是你试图避免重复,并且只得到值的上(或下)三角形。
标签: numpy python-3.6