guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: propose deprecation of generalized-vector-*


From: Daniel Hartwig
Subject: Re: propose deprecation of generalized-vector-*
Date: Tue, 19 Feb 2013 07:57:52 +0800

On 19 February 2013 00:25, Mike Gran <address@hidden> wrote:
> From: Noah Lavine <address@hidden>
>>Hello,
>>>On Wed 23 Jan 2013 13:20, Daniel Llorens <address@hidden> writes:
>>>
>>>> In [2]: a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>>
>>>> In [4]: a[1]
>>>> Out[4]: array([4, 5, 6])
>>>> In [5]: a[1, 1]
>>>> Out[5]: 5
>>>>
>>>> array-ref can be extended very simply to do that. It accumulates on the
>>>> position as it is done now, but if the index list comes up short it
>>>> makes a shared array with the remaining axes instead of giving a rank
>>>> error. So it shouldn't be any slower than array_ref.
>>>
>>>It could make sense, yes.  What do others think?  What happens for
>>>array-set!?  Care to propose a patch?
>>
>>
>> I haven't worked with the array functionality, so I might be missing
>> something, but I don't see why this is natural for array-ref.

Right, these are my sentiments also (including the snipped part).
Relaxing array-ref in the proposed way means it could hide programming
errors, etc.  Particularly with typed arrays, where previously the
result will reliably be of the given type.

>
> One could imagine a Matlab-like syntax where array-ref has to have
> the same number of indices as the underlying array, but, if an
> index were replaced with a symbol, it would return a slice.
>
> if np is [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
> (array-ref np 1 1) -> 5
> (array-ref np 1 :) -> [4, 5, 6]
> (array-ref np : 1) -> [[2], [5], [8]]
>
> Or maybe that's already in Scheme. I'll admit I've never done matrices
> in scheme.

Yes, but please lets imagine this only and not multiply the purpose of
array-ref.  Other languages do that kind of thing a lot with a sort of
“guess what I really meant to do and do that instead”, which leads to
messy documentation, programming errors, and security issues
(Ruby-on-Rails?).

This is certainly a common enough usage of make-shared-array to
justify its own procedure with more helpful syntax.  Even I would make
this two procedures, array-slice and array-slice/shared, to decide
between new or shared array.

Regards



reply via email to

[Prev in Thread] Current Thread [Next in Thread]