Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

numpy为什么选择tuple作为shape呢?

15 views
Skip to first unread message

蓝色幽灵

unread,
Jul 4, 2012, 4:42:28 AM7/4/12
to
tuple本身不支持数学运算,很多时候挺不方便的,比如想知道a,b的形状差多少

a.shape - b.shape

不行,tuple不能相减。为什么不象matlab那样,形状、下标统一用array表示呢...

--

[36m※ 修改:·Tux 于 Jul 4 16:42:27 2012 修改本文·[FROM: 101.68.41.*] [m
[m [1;33m※ 来源:·水木社区 newsmth.net·[FROM: 101.68.41.*] [m

普洛米·我们的民族从来不缺乏苦难

unread,
Jul 4, 2012, 4:56:05 AM7/4/12
to
np.array(a.shape) - np.array(b.shape)

.shape是一个多维数组的属性,只能通过reshape()来调整,
不能任由程序员赋值,所以设定为tuple而不是list/array


【 在 Tux (蓝色幽灵) 的大作中提到: 】
: tuple本身不支持数学运算,很多时候挺不方便的,比如想知道a,b的形状差多少
: a.shape - b.shape
: 不行,tuple不能相减。为什么不象matlab那样,形状、下标统一用array表示呢...

--

[m [32m※ 来源:·水木社区 http://newsmth.net·[FROM: 69.181.208.238] [m

蓝色幽灵

unread,
Jul 4, 2012, 5:08:02 AM7/4/12
to
嗯,我是转成array来算的,只不过转的多了挺啰嗦的

况且shape本身也是调整的啊,

In [15]: a = arange(16).reshape(4,4)

In [16]: a
Out[16]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])

In [17]: a.shape = 2,2,4

In [18]: a
Out[18]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],

[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])


【 在 pulo (普洛米·我们的民族从来不缺乏苦难) 的大作中提到: 】
: np.array(a.shape) - np.array(b.shape)
: .shape是一个多维数组的属性,只能通过reshape()来调整,
: 不能任由程序员赋值,所以设定为tuple而不是list/array
: ...................

--

普洛米·我们的民族从来不缺乏苦难

unread,
Jul 4, 2012, 5:48:15 AM7/4/12
to
你可以把.shape整体绑定到另外一个tuple,这个绑定会调用
numpy/core/src/multiarray/shape.c里面的_fix_unknown_dimension()函
数,检查新shape和旧shape乘起来是否一样,不一样就抛异常。

但你不能a.shape[1]=3,因为你不能只改变其中一维的大小。把.shape设定成
immutable type从概念上防止了你可能这样更改的企图。

【 在 Tux (蓝色幽灵) 的大作中提到: 】
: 嗯,我是转成array来算的,只不过转的多了挺啰嗦的
: 况且shape本身也是调整的啊,
: In [15]: a = arange(16).reshape(4,4)
: ...................

蓝色幽灵

unread,
Jul 4, 2012, 6:47:01 AM7/4/12
to
嗯,这个目的确实达到了...


【 在 pulo (普洛米·我们的民族从来不缺乏苦难) 的大作中提到: 】
: 你可以把a.shape整体"赋值"为另外一个tuple2,该"赋值"语句实际调用setattr(a,'shape',tuple2),并最终触发numpy/core/src/multiarray/shape.c里面的_fix_unknown_dimension()函数,检查新shape和旧shape乘起来是否一样,不一样就抛异常。
: 但你不能a.shape[1]=3,因为你不能只改变其中一维的大小。把.shape设定成immutable type从概念上防止了你可能这样更改的企图。


0 new messages