Python NumPy数组

2024-06-28 19:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在处理两个数组,试图像处理二维数组一样处理它们。我对NumPy使用了很多矢量计算。想知道如何填充这样的数组吗:

X = [1, 2, 3, 1, 2, 3, 1, 2, 3]

或:

X = [0.2, 0.4, 0.6, 0.8, 0.2, 0.4, 0.6, 0.8, 0.2, 0.4, 0.6, 0.8, 0.2, 0.4, 0.6, 0.8]

忽略消息的第一部分。

我必须以网格的形式填充两个数组。但是网格的尺寸因用户而异,所以我需要一个通用的表格。我一上午都在努力,终于得到了我想要的。

如果我早些时候引起了混乱,我很抱歉。英语不是我的语言,有时我很难解释。

这是为我做这项工作的代码:

    myIter = linspace(1, N, N)
    for x in myIter:
        for y in myIter:
            index = ((x - 1)*N + y) - 1
            X[index] = x / (N+1)
            Y[index] = y / (N+1)

用户输入N。 X,Y的长度是N*N


Tags: 用户innumpy语言网格消息forindex
2条回答
print numpy.array(range(1, 4) * 3)
print numpy.array(range(1, 5) * 4).astype(float) * 2 / 10

您可以使用函数^{}。从例子来看:

>>> a = np.array([0, 1, 2])
>>> np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])

使用此函数,您还可以立即重新调整数组的形状,就像使用“重新调整”的其他答案中所做的那样(通过定义“重复”是更多维度):

>>> np.tile(a, (2, 1))
array([[0, 1, 2],
       [0, 1, 2]])

加法:并比较内置函数tile和乘法之间的速度差:

In [3]: %timeit numpy.array([1, 2, 3]* 3)
100000 loops, best of 3: 16.3 us per loop
In [4]: %timeit numpy.tile(numpy.array([1, 2, 3]), 3)
10000 loops, best of 3: 37 us per loop

In [5]: %timeit numpy.array([1, 2, 3]* 1000)
1000 loops, best of 3: 1.85 ms per loop
In [6]: %timeit numpy.tile(numpy.array([1, 2, 3]), 1000)
10000 loops, best of 3: 122 us per loop 

编辑

您在问题中给出的代码的输出也可以实现如下:

arr = myIter / (N + 1)
X = numpy.repeat(arr, N)
Y = numpy.tile(arr, N)

这样就可以避免数组循环(这是使用numpy的一大优势)。生成的代码更简单(如果您知道函数,请参阅文档中的repeattile)也更快。

相关问题 更多 >