gpt4 book ai didi

python - 使用 i, j for 循环制作的矩阵(对于 2*9 形状)

转载 作者:行者123 更新时间:2023-12-02 18:12:31 24 4
gpt4 key购买 nike

我希望使用 i, j for 循环来制作 a 矩阵。我尝试的代码如下。输出“xcount1”显示 1 x 18 形状。但是,我希望输出是 2 x 9 的形状,如下所示。

xcount1 = [[0. 0.],[0. 1.],[0. 2.],[1. 0.],[1. 1.],[1. 2.],[2. 0.],[2. 1.],[2. 2.]]

下面的代码需要如何修改才能得到上面的输出?

import numpy as np
xcount1 = []
for i in range(3):
for j in range(3):
xcount1 = np.append(xcount1,[i,j])
print(np.shape(xcount1))

最佳答案

numpy 中执行此操作的快速方法(无需在 Python 中生成 listlist 的所有工作,只是为了最后将其转换为 numpy 并且在构建过程中没有获得矢量化的好处)是:

# Make a range of floats from 0 to 8, double each one in place, then reshape it
# so it becomes nine two-element subarrays that look like:
array([[0., 0.], [1., 1.], [2., 2.], ... [7., 7.], [8., 8.]])
xcount1 = np.arange(9, dtype=float).repeat(2).reshape(9,2)

xcount1[:, 0] //= 3 # Divide first element of each two element subarray by 3
xcount1[:, 1] %= 3 # Reduce secodnd element of each subarray modulo 3

# xcount is now *exactly* what you expected
print(xcount)

输出:

[[0. 0.]
[0. 1.]
[0. 2.]
[1. 0.]
[1. 1.]
[1. 2.]
[2. 0.]
[2. 1.]
[2. 2.]]

您的原始代码不起作用,因为 numpy.append 在未提供 axis 参数时会在附加之前展平输入和输出,因此您会丢失结构。我对 numpy 还不够专业,无法使用 append 从头开始​​构建正确的方法(也就是说,np.append 非常慢,每次都进行复制,所以无论如何这都是一个糟糕的解决方案),但是一旦完成就可以轻松 reshape 它。只需添加:

xcount1 = xcount1.reshape(9,2)

到代码末尾,它将 reshape 它以匹配您想要的分组(尽管它会比我的代码慢得多,甚至只是 xcount1 = np.array([[i, j] for i in range(3) for j in range(3)], dtype=float) 这不会从任何向量化中受益,但对于足够小的输入来说,这并不重要)。

关于python - 使用 i, j for 循环制作的矩阵(对于 2*9 形状),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72082286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com