numpy - 使用来自 linspace 的坐标获取矩阵中的索引
问题描述
我有一个由两个 linspaces x和y定义的矩阵m:
x = np.linspace(-1, 1, 100).reshape(1, 100)
y = np.linspace(-1, 1, 100).reshape(100, 1)
m = x + 1j * y
# > m.shape
# (100, 100)
如果我想将一个值设置为给定 linspace 中定义的坐标点,而不是数组索引,该怎么办?
例如,我想写这样的东西:
m[-0.5, 0.123] = val
numpy 中是否有一种优雅的方法可以将坐标系转换为数组中最近的索引?
解决方案
这里有两种可能的方式。您可以使用np.searchsorted
根据提供的值查找索引x
并且y
正在增加。如果x
和y
是均匀分布的(如您的示例),那么您可以在 O(1) 时间内linspace
近似值的索引val
。(val - (-1) / (1 - (-1)) * 100
import numpy as np
z = np.linspace(-1, 1, 100)
m = z[None,:] + 1j * z[:,None]
# using searchsorted
f = lambda v: np.searchsorted(z, v)
# approximate the index using the fact that numbers in z are evenly spaced
g = lambda v: int((v - z[0]) / (z[-1] - z[0]) * z.shape[0])
print(m[f(0.5), f(0.123)])
# (0.1313131313131315+0.5151515151515154j)
print(m[g(0.5), g(0.123)])
# (0.1313131313131315+0.5151515151515154j)
推荐阅读
- javascript - 尝试使用 API 中的 Mobx 显示数据
- performance - 在这个例子中,我应该使用 WebSocket 还是 HTTP?
- laravel - 更改密码列名称并登录(Laravel 8)
- node.js - 标准化下拉菜单的选定车把助手
- postgresql - 如何使用批处理文件在 CMD 中键入文本?
- c# - 如何在 C# 中使用 AddAdditionalCapability 设置 Saucelabs 隧道标识符?
- php - 将回复电子邮件地址更改为特定的 WooCommerce 电子邮件通知
- nosql - Oracle NoSQL DB Streams 如何处理故障?
- spring - 水平扩展 spring-kafka 消费者应用程序
- python - 为 scipy ndarray 分配内存的问题