python - 通过高级索引进行 numpy 掩码分配
问题描述
所以我正在学习 numpy,在这本书中有一个问题告诉我创建三个数组 Z、M 和 C。在我的 Z 数组中,我想创建一个 (4,5) 维数组,而我的 M 数组是一个布尔掩码数组,其大小相同 (4,5) 但为 True,其中
M = abs(Z) < 2
My C 数组的大小也相同但仅包含复数
C = np.full(Z.shape, (-0.4 + 0.6j), dtype=complex)
现在我的三个数组如下
[[2.23606798 1.41421356 1. 1.41421356 2.23606798]
[2.02758751 1.05409255 0.33333333 1.05409255 2.02758751]
[2.02758751 1.05409255 0.33333333 1.05409255 2.02758751]
[2.23606798 1.41421356 1. 1.41421356 2.23606798]]
[[False True True True False]
[False True True True False]
[False True True True False]
[False True True True False]]
[[-0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j]
[-0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j]
[-0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j]
[-0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j -0.4+0.6j]]
将拼写错误从乘 C 更改为添加 C
现在这是我的问题。我想将我的 Z 数组中的每个元素自己相乘,然后将它们与 C 相加,其中所有 M 数组元素都是 True 所以我会使用Z[M]
但是当我尝试将它相乘时,由于 Z 数组变为一维数组,我不知道该怎么做。我需要我的数组形状相同,我只想在 M 元素为真的情况下增加 Z 元素而不改变 Z 数组的尺寸
Z数组的正确最终输出应该是书后的这个
[[-2. -1.j -0.4 +2.6j -1.4 +0.6j
-0.4 -1.4j 2. -1.j ]
[-2. -0.33333333j 0.48888889+1.26666667j -0.51111111+0.6j
0.48888889-0.06666667j 2. -0.33333333j]
[-2. +0.33333333j 0.48888889-0.06666667j -0.51111111+0.6j
0.48888889+1.26666667j 2. +0.33333333j]
[-2. +1.j -0.4 -1.4j -1.4 +0.6j
-0.4 +2.6j 2. +1.j ]]
解决方案
IIUC,你可以这样做:z * z * c * m
在m
中,所有 False 值都表示为 0,所有 True 值都表示为 1。你可以看到这个m * 1
推荐阅读
- azure - 为什么 Azure 负载均衡器不适用于不在可用性集中的计算机?
- git - Git 标记指向错误的提交 ID
- python - 在此代码中发送响应后,如何删除 ?Say 命令消息?
- php - 当商品在 WooCommerce 中的购物车中时,新样式的购物车按钮
- vb.net - VB.net 当我使用一个类时我得到'System.NullReferenceException' 当我使用一个模块时一切正常,希望有人能解释为什么
- docker - 如何在 docker 容器中为 Nextflow 进程生成输出目录?
- c++ - Visual c++ 编译器/链接器:Linkerargument /ENTRY 的问题
- .htaccess - htaccess 从 URL 中删除部分但保持目标相同
- javascript - JavaScript 字符串全部替换
- amazon-web-services - 在定义单个 AWS::Serverless::Function 的 SAM 模板中指定多个 API 阶段和 Lambda 别名