Первый пост здесь, пожалуйста, go полегче. :)
Я хочу векторизовать следующее:
rowStart=array of length N
rowStop=rowStart+4
colStart=array of length N
colStop=colStart+4
x=np.random.rand(512,512) #dummy test array
output=np.zeros([N,4,4])
for i in range(N):
output[i,:,:]=x[ rowStart[i]:rowStop[i], colStart[i]:colStop[i] ]
То, что я хотел бы сделать, это что-то вроде:
output=x[rowStart:rowStop, colStart:colStop ]
где numpy распознает, что индексы срезов являются векторами, и транслирует срезы. Я понимаю, что это, вероятно, не сработает, потому что, хотя я знаю, что мои выходные данные среза всегда имеют одинаковый размер, numpy нет.
Я рассмотрел различные подходы, включая «причудливый» или « расширенная "индексация (которая, похоже, работает для индексации, а не нарезки), массивная логическая индексация с использованием сеток (непрактично с точки зрения памяти, поскольку мой N может достигать 50-100 тысяч) и np.take , что просто кажется еще одним способом выполнения причудливой / расширенной индексации.
Я мог бы увидеть, как я мог бы потенциально использовать необычную / расширенную индексацию, если бы мог получить массив, который выглядит так: * и аналогичный для столбцов, но у меня также возникли проблемы с определением векторизованного подхода для его создания.
Буду признателен за любой совет, который вы можете дать. Спасибо!