GVKun编程网logo

将复杂的值分配给numpy数组?(将下列复杂度由小到大重新排序2)

21

如果您对将复杂的值分配给numpy数组?和将下列复杂度由小到大重新排序2感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解将复杂的值分配给numpy数组?的各种细节,并对将下列复杂度由小到大重新排

如果您对将复杂的值分配给numpy数组?将下列复杂度由小到大重新排序2感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解将复杂的值分配给numpy数组?的各种细节,并对将下列复杂度由小到大重新排序2进行深入的分析,此外还有关于numpy:从2个真实的数组创建一个复杂的数组?、numpy:将值分配给带有索引列表的2d数组、不可变的numpy数组?、为什么将切片的numpy数组分配给另一个变量会继续对其进行切片?的实用技巧。

本文目录一览:

将复杂的值分配给numpy数组?(将下列复杂度由小到大重新排序2)

将复杂的值分配给numpy数组?(将下列复杂度由小到大重新排序2)

这给出了预期的结果

x = random.rand(1) + random.rand(1)*1jprint x.dtypeprint x, x.real, x.imag

这有效

C = zeros((2,2),dtype=complex)C[0,0] = 1+1jprint C

但是如果我们将其更改为

C[0,0] = 1+1j + x

我收到“ TypeError:无法将复数转换为浮点数”。

如果现在我们省略显式的dtype = complex,我将得到“ ValueError:设置具有序列的数组元素”。

有人可以解释发生了什么,以及如何做到无误吗?我迷路了。

答案1

小编典典

要插入complexxx + somethingin C,您显然需要将其视为数组,因此可以x将其索引或分配给的一个切片C

>>> Carray([[ 0.+0.j,  0.+0.j],       [ 0.+0.j,  0.+0.j]])>>> C[0, 0:1] = x>>> Carray([[ 0.47229555+0.7957525j,  0.00000000+0.j       ],       [ 0.00000000+0.j       ,  0.00000000+0.j       ]])>>> C[1, 1] = x[0] + 1+1j>>> Carray([[ 0.47229555+0.7957525j,  0.00000000+0.j       ],       [ 0.00000000+0.j       ,  1.47229555+1.7957525j]])

看来NumPy无法正确处理这种情况。考虑提交错误报告。

numpy:从2个真实的数组创建一个复杂的数组?

numpy:从2个真实的数组创建一个复杂的数组?

我想将同一数组的2个部分组合成一个复杂的数组:

Data[:,:,0],Data[:,1]

这些不起作用:

x = np.complex(Data[:,1])
x = complex(Data[:,1])

我想念什么吗?numpy是否不喜欢对复数执行数组函数?这是错误:

TypeError: only length-1 arrays can be converted to Python scalars

numpy:将值分配给带有索引列表的2d数组

numpy:将值分配给带有索引列表的2d数组

我有2d的numpy数组(想想灰度图像)。我想为该数组的坐标列表分配某些值,例如:

img = np.zeros((5, 5))coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])def bad_use_of_numpy(img, coords):    for i, coord in enumerate(coords):        img[coord[0], coord[1]] = 255    return imgbad_use_of_numpy(img, coords)

这行得通,但是我觉得我可以利用numpy功能来使其更快。以后我可能还会有一个用例,如下所示:

img = np.zeros((5, 5))coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])vals = np.array([1, 2, 3, 4])def bad_use_of_numpy(img, coords, vals):    for coord in coords:        img[coord[0], coord[1]] = vals[i]    return img bad_use_of_numpy(img, coords, vals)

有没有更向量化的方法呢?

答案1

小编典典

我们可以将coordsas的每一行拆开img,然后将col索引拆包以建立索引,然后进行分配。

现在,由于该问题被标记为:Python 3.x,因此我们可以简单地将其解压缩,[*coords.T]然后分配-

img[[*coords.T]] = 255

一般而言,我们可以tuple用来解压缩-

img[tuple(coords.T)] = 255

我们还可以计算线性指数,然后分配np.put-

np.put(img, np.ravel_multi_index(coords.T, img.shape), 255)

不可变的numpy数组?

不可变的numpy数组?

有没有简单的方法来创建不可变的NumPy数组?

如果必须从中派生一个类ndarray来执行此操作,那么为实现不变性而必须重写的最少方法集是什么?

答案1

小编典典

您可以使numpy数组不可写:

a = np.arange(10)a.flags.writeable = Falsea[0] = 1# Gives: ValueError: assignment destination is read-only

另请参见此线程中的讨论:

http://mail.scipy.org/pipermail/numpy-
discussion/2008-December/039274.html

和文档:

http://docs.scipy.org/doc/numpy/reference/generation/numpy.ndarray.flags.html

为什么将切片的numpy数组分配给另一个变量会继续对其进行切片?

为什么将切片的numpy数组分配给另一个变量会继续对其进行切片?

在您的代码中,您给出了b = a,因此b仅引用了a。每次更改b的值时,也会同时更改a的值。有关分配,复制和深层复制的更多详细信息,请参阅此link

b[0] = a[0][::2]

上面的代码要求b跳过b的值(ab相同)。因此,每次执行此操作时,它都会进一步减少它。

如果要复制,请使用

b = a.copy()

b = a[::]

今天关于将复杂的值分配给numpy数组?将下列复杂度由小到大重新排序2的分享就到这里,希望大家有所收获,若想了解更多关于numpy:从2个真实的数组创建一个复杂的数组?、numpy:将值分配给带有索引列表的2d数组、不可变的numpy数组?、为什么将切片的numpy数组分配给另一个变量会继续对其进行切片?等相关知识,可以在本站进行查询。

本文标签: