好吧,我尽我所能在标题中描述我的问题。
我的问题如下:
我有一个numpy数组,它可能不总是具有一致的形状/维度(范围从1到3)。以数组的形状为[100]的最简单的情况为例,我可以执行以下操作(并获得所需的结果):
for i, bounds in enumerate(values):
low, high = bounds
arr[i] *= high - low
当数组的形状为[100,200]时,我可以执行以下操作:
for i, bounds in enumerate(values):
low, high = bounds
arr[i, :] *= high - low
或者如果数组的形状是[200,100],我可以改为:
for i, bounds in enumerate(values):
low, high = bounds
arr[:, i] *= high - low
在3d的情况下,如果数组的形状是[300,100,200],我会做:
for i, bounds in enumerate(values):
low, high = bounds
arr[:, i, :] *= high - low
我的问题是,我不知道如何改变i
在索引中的位置,也不知道如何在遍历i
对应的轴时(当arr
的形状发生变化时)索引所有元素。在我的例子中,i
的“位置”是基于x1m4 n1福尔斯数组形状中的位置。这是numpy可以做的事情吗?还是我被许多if语句卡住了?
2条答案
按热度按时间wgxvkvu91#
一种可能性是移动轴,将所需的轴(根据您的标准)放在新视图
a2
的第一位。然后a2[i,:,:]
与arr[:,i,:]
相同(例如),如果正确的轴为1。另外,这样,您可以使用...
表示法来替换所有的:
。所以a2[i,...]
。r1zhe5dt2#
您可以动态创建索引。索引集是一个元组,
:
是slice(None)
。找到维度中与值的长度相同的索引。然后在循环中更新索引列表中索引列表。