python - 如何使用 3d numpy 数组的第一个波段作为所有其他波段的虚值

标签 python numpy multidimensional-array

我有一个像 [[6,7,8],[1,2,3],[1,2,3]] 这样的 3d numpy 数组,我想使用第一个“band"[6,7,8] 作为所有其他“带”的虚值。应该是这样的

[[6,7,8],[1+6j,2+7j,3+,8j],[1+6j,2+7j,3+8j]]

有人知道这是怎么回事吗? 感谢您的帮助!

最佳答案

通常人们将“first band”称为第一行。

>>> arr = np.array([[6,7,8],[1,2,3],[1,2,3]])

#First need a complex datatype.
>>> arr = arr.astype(np.complex)
>>> arr
array([[ 6.+0.j,  7.+0.j,  8.+0.j],
       [ 1.+0.j,  2.+0.j,  3.+0.j],
       [ 1.+0.j,  2.+0.j,  3.+0.j]])

# .imag and .real access the real and imaginary parts of the array.
>>> arr[1:].imag = arr[0].real
>>> arr
array([[ 6.+0.j,  7.+0.j,  8.+0.j],
       [ 1.+6.j,  2.+7.j,  3.+8.j],
       [ 1.+6.j,  2.+7.j,  3.+8.j]])

跳过多次转换调用和 vstack 可以节省大量时间:

arr = np.array([[6,7,8],[1,2,3],[1,2,3]])

%timeit a=arr.astype(np.complex);a[1:].imag = a[0].real
100000 loops, best of 3: 4.03 µs per loop

%timeit np.vstack((arr[0,:], arr[1:,:] + arr[0,:] * 1.j))
10000 loops, best of 3: 25.2 µs per loop

对于更大的数组:

arr = np.random.rand(500,500)

%timeit a=arr.astype(np.complex);a[1:].imag = a[0].real
1000 loops, best of 3: 898 µs per loop

In [13]: %timeit np.vstack((arr[0,:], arr[1:,:] + arr[0,:] * 1.j))
1000 loops, best of 3: 1.77 ms per loop

主要区别在于 vstack 选项必须将 arr 转换为复杂数据类型两次。

%timeit arr.astype(np.complex)
1000 loops, best of 3: 530 µs per loop

关于python - 如何使用 3d numpy 数组的第一个波段作为所有其他波段的虚值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034631/

相关文章:

python - 默认情况下使matplotlib图看起来像R?

python - 来自 sklearn 的决策边界

matlab - 通过交换行和列来重新排列稀疏数组

python - NumPy:当类似数组的类中 __array_ufunc__=None 时,某些运算符不起作用

python - 快速就地替换 numpy 数组中的某些值

c - C语言代码的问题

excel - EXCEL VBA 中是否可以将多维数组作为参数传递?

python - ** 之后的 MetaSerialisable 对象参数必须是映射,而不是 unicode

python - 为什么我的“赞”按钮仅适用于 Django 中列表的第一个实例?

php - 如何在 PHP 中根据另一个数组的值构建多维数组的键?