Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以让这段代码更加通用和优雅?_Python_Numpy - Fatal编程技术网

Python 有没有一种方法可以让这段代码更加通用和优雅?

Python 有没有一种方法可以让这段代码更加通用和优雅?,python,numpy,Python,Numpy,我是一个Python新手,我想问一下,是否有一种方法可以让这段代码更加优雅和通用: array = np.linalg.norm(np.array([ X-mu[0], X-mu[1], X-mu[2], X-mu[3], X-mu[4], ]), axis=2) X是RGB图像(NxD,30000x3阵列),mu是kxD(5x3)矩阵。最终,数组应该是kxN或Nxk矩阵 有没有一种方法可以循环使用mu的索引而不是手动键入它?您正在尝试对(3k,3)和(5,3)数

我是一个Python新手,我想问一下,是否有一种方法可以让这段代码更加优雅和通用:

array = np.linalg.norm(np.array([
   X-mu[0],
   X-mu[1],
   X-mu[2],
   X-mu[3],
   X-mu[4],
]), axis=2)
X是RGB图像(NxD,30000x3阵列),mu是kxD(5x3)矩阵。最终,数组应该是kxN或Nxk矩阵


有没有一种方法可以循环使用mu的索引而不是手动键入它?

您正在尝试对
(3k,3)
(5,3)
数组执行减法操作。为了能够减少第二个轴以获得
(3k,5)
(5,3k)
的最终结果,您需要将第一个维度一起广播。如果引入一个新的轴,这对于广播来说是微不足道的:

np.linalg.norm(X[:, None, :] - mu[None, ...], axis=-1)

None
在下标中放置的位置创建大小为1的新轴。省略号(
)抓住其余的轴,这样您就不必显式地编写
:,:


上述表达式的差异分别传播到
(3k,5,3)
(5,3k,3)
。在这两种情况下,
norm
缩小最后一个轴,保留形状的前两个元素。根据您的内存布局,这两种方法都可能更快,有时甚至更明显。如果这对您很重要,那么做一个基准测试可能是值得的。

什么尺寸是
X
?X是一个NxD(约300.000x3数组)您希望输出的尺寸是多少?等等,X是2D还是3D?刚刚更新了说明。X是2D。
np.linalg.norm(X[None, ...] - mu[:, None, :], axis=-1)