我发誓这应该很容易。。。为什么不是?:(一)
实际上,我想将同一个数组的两个部分组合起来形成一个复杂的数组:
Data[:,:,:,0] , Data[:,:,:,1]
这些不起作用:
x = np.complex(Data[:,:,:,0], Data[:,:,:,1])
x = complex(Data[:,:,:,0], Data[:,:,:,1])
我遗漏了什么吗?numpy不喜欢对复数执行数组函数吗?错误如下:
TypeError: only length-1 arrays can be converted to Python scalars
这似乎是你想要的:
下面是另一个解决方案:
还有另一个更简单的解决方案:
PS:如果要保存内存(无中间数组):
开发人员下面的解决方案也很快。
如果实部和虚部是沿最后一个维度的切片,而数组是沿最后一个维度连续的,则可以
如果使用单精度浮点,则
下面是一个更完整的例子
如果你想摆脱铸件周围的额外尺寸,你可以做一些类似的事情
这是因为,在内存中,复数实际上只是两个浮点数。第一个代表实部,第二个代表虚部。 数组的view方法更改数组的dtype,以反映您希望将两个相邻的浮点值视为单个复数,并相应地更新维度。
此方法不会复制数组中的任何值或执行任何新计算,它所做的只是创建一个新的数组对象,该对象以不同的方式查看同一内存块。 这使得此操作可以比任何涉及复制值的操作都快得多。 这也意味着在复数数组中所做的任何更改都将反映在具有实部和虚部的数组中。
如果删除类型转换后立即存在的额外轴,则恢复原始数组可能会有点困难。 像
A_comp[...,np.newaxis].view(np.float64)
这样的操作目前不起作用,因为在编写本文时,NumPy在添加新轴时没有检测到数组仍然是C-连续的。 见this issue。A_comp.view(np.float64).reshape(A.shape)
似乎在大多数情况下都有效。当然有一点很明显:
相关问题 更多 >
编程相关推荐