필터 지우기
필터 지우기

indices of a spiral

조회 수: 7 (최근 30일)
Boris Povazay
Boris Povazay 2018년 4월 20일
편집: Stephen23 2018년 4월 20일
It is simple to geerate a growing spiral matrix vial the spiral function:
S=spiral(3)
which yields a nice spiral matrix:
S =
7 8 9
6 1 2
5 4 3
However it is not straight forward to generate the list of indices for that sequence:
[2,2], [3,2], [3,3], [2,3], [1,3], ...
Does anyone have an idea for a one-liner that can do this?
  댓글 수: 1
Stephen23
Stephen23 2018년 4월 20일

You have swapped the dimensions: from smallest to largest the indices are actually

(2,2) (2,3) (3,3) (3,2) (3,1) (2,1) (1,1) (1,2) (1,3)

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2018년 4월 20일
편집: Stephen23 2018년 4월 20일

Not quite one line, but you can use sort and ind2sub for this:

>> M = spiral(3)
M =
   7   8   9
   6   1   2
   5   4   3
>> [~,idx] = sort(M(:));
>> [R,C] = ind2sub([3,3],idx);
>> [R,C]
ans =
   2   2
   2   3
   3   3
   3   2
   3   1
   2   1
   1   1
   1   2
   1   3

Or copy the spiral Mfile to your user directory, give it a new name, and edit it to return the indices. It wouldn't be hard to do this, just remember to preallocate the output matrices! Note that the file is copyright.

  댓글 수: 2
Boris Povazay
Boris Povazay 2018년 4월 20일
Thanks for the quick reply and the solution. That ind2sub in combination with the sorting indices does the trick - I got stuck after assigning the indices form the sort function. As you say the spiral(n) function is copyrighted, which makes me wonder if this is maintained code and where one might ask for an implementation that also generates the indices directly. Best regards!
Stephen23
Stephen23 2018년 4월 20일
편집: Stephen23 2018년 4월 20일

@Boris Povazay: that specific code is copyright... but I doubt that the algorithm is: online you can find plenty of implementations of the Ulam spiral, e.g.:

https://rosettacode.org/wiki/Ulam_spiral_(for_primes)

which relies on exactly that arrangement of numbers. Note that the Ulam spiral is flipped vertically relative to the MATLAB spiral (in other words: MATLAB is clockwise, Ulam spiral is counter-clockwise). I am sure you could easily implement a version which generates the indices directly.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by