如何解决从3D NumPy数组中正交获取每个维度上的随机2D切片
我正在尝试随机抽取形状为import plotly.graph_objects as go
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
fig = go.Figure(go.Scatter(
x = df['Date'],y = df['AAPL.High'],))
fig.update_layout(
title = 'Time Series with Custom Date-Time Format',#xaxis_tickformat = '%d %B (%a)<br>%Y'
xaxis_tickformat = '%d %B <br>%Y'
#xaxis_tickformat = '%B'
)
fig.show()
的NumPy数组的30%。最后一个维度是图像的通道信息,因此本质上是3D图像。目的是随机地在每个维度上正交生成2D切片,以获取原件总信息的30%。
我看着this question来了解如何随机生成切片,但无法将其扩展到我的用例。
到目前为止,我只能生成所需数据的大小。
(790,64,1)
很抱歉,这个问题有点笼统。
解决方法
首先,您要保留30%的原始信息。
如果您保留每个轴的30%,则只会得到0.3*0.3*0.3 = 0.027
(2.7%)的信息。考虑使用0.3 ^(1/3)
作为折减系数。
接下来的事情是,您可能希望保留随机采样索引的空间顺序,因此可以在链接的问题中添加np.sort(...)
。
关于主要问题,您可以使用np.meshgrid(*arrays,sparse=True,indexing='ij')
来获取
可以用于广播的数组列表。这对于将必要的新轴添加到随机索引非常方便。
import numpy as np
img = np.random.random((790,64,1))
alpha = 0.3 ** (1/3)
shape_new = (np.array(img.shape[:-1]) * alpha).astype(int)
idx = [np.sort(np.random.choice(img.shape[i],shape_new[i],replace=False))
for i in range(3)]
# shapes: [(528,) (42,)]
idx_o = np.meshgrid(*idx,indexing='ij')
# shapes: [(528,1,1)
# (1,42,42)]
img_new = img[tuple(idx_o)]
# shape: (528,1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。