我想得到一个结果 ax=as_x-aseg_3d*直线
其中asux和aline是numpy向量,aseg\u3d是一个数组。因为x.shape和aline\u a shape是(S,),而aseg\u 3d shape也显示为(S,),因为它应该用于数组。结果ax也是一个数组,其形状与aseg\ U 3d相同
问题是,aseg\u3d是一个数组,因为里面的数组长度不同。然而,有时他们不这样做,而比阿塞古三维成为只是一个二维阵列。然后,上述多应用程序在ValueError时失败:操作数无法与形状(S,N)一起广播。你知道吗
我可以这样做: ax=as_x[:,无]-aseg_3d*aline_a[:,无]
但是当我有一个数组时,这与前面的情况不一样。你知道吗
有没有办法让它在两种情况下都能工作:数组数组和二维数组?你知道吗
或者有一种方法可以保持数组的numpy数组dtype=“object”,即使所有内部数组的长度相同?你知道吗
顺便说一句,我试着用列表理解来做上面的乘法运算,这总是可行的,但是速度要慢得多。你知道吗
谢谢你的建议!你知道吗
在两种情况下都有效的表达式:
你可以利用转置。简单情况(仅乘法):
完整操作示例:
示例:
工作原理:
如果
vec_of_vecs_or_2D
是对象数据类型的1D,那么转置什么也不做。你知道吗如果
vec_of_vecs_or_2D
真的是2D,那么转置将匹配vector
的轴移动到末尾,这样vector
就被正确地广播了,然后又返回。你知道吗为什么便宜:
请注意,
numpy
中的转置是惰性的。它实际上并不移动任何数据,它只是“交换轴标签”。你知道吗例如,对
1000x1000
数组进行转置需要在我的笔记本电脑上花费约200 ns:或者,在任何情况下强制阵列:
示例
方法1(丑陋但简单):
方法二:(不那么难看,但很复杂)
相关问题 更多 >
编程相关推荐