urschrei / simplification

Very fast Python line simplification using either the RDP or Visvalingam-Whyatt algorithm implemented in Rust
Other
168 stars 18 forks source link

Support for np.ndarray that is not C-contiguous #19

Closed odel4y closed 2 years ago

odel4y commented 2 years ago

Hi!

The following code:

from simplification.cutil import simplify_coords
import numpy as np

x = np.array([1,2,3,4,5])
y = np.array([0,1,1,1,0])
coords = np.transpose(np.stack((x,y)))

simplified = simplify_coords(coords, 1.0)

returns the error

Traceback (most recent call last):
  File "simplification-c-contiguous-bug.py", line 10, in <module>
    simplified = simplify_coords(coords, 1.0)
  File "simplification/cutil.pyx", line 51, in simplification.cutil.simplify_coords
  File "simplification/cutil.pyx", line 65, in simplification.cutil.simplify_coords
  File "stringsource", line 658, in View.MemoryView.memoryview_cwrapper
  File "stringsource", line 349, in View.MemoryView.memoryview.__cinit__
ValueError: ndarray is not C-contiguous

Adding the line coords = np.ascontiguousarray(coords) solves the error.

I would guess that this implicit assumption of a contiguous array (see here for an explanation) in your code is unwanted behavior and could be fixed by an explicit check.

Thanks!

urschrei commented 2 years ago

Oh, good catch. This is fixed by https://github.com/urschrei/simplification/commit/14874c0aea2dc182c5ea5b6ef131ae157a56c843. I'll cut a new release today.