【发布时间】:2022-07-21 18:31:31
【问题描述】:
我面临的问题是我将一个(非常大的)列向量和一个(非常大的)行向量相乘,我得到了错误Killed: 9。
更准确地说:我的行向量是 16 个行向量 (0,1) 的张量积,而我的列向量是 16 个列向量 (0,1).T 的张量积。我将这个矩阵乘法实现为:
import numpy as np
import functools as ft
one = np.array([[0,1]]).T
listt = [one,one,one,one,one,one,one,one,one,one,one,one,one,one,one,one]
column_vector = ft.reduce(np.kron, listt)
row_vector = column_vector.T
P = column_vector*row_vector
print(P)
这给了我错误 Killed : 9。我想知道是否有办法做到这一点而不会出现此错误? (打印出结果矩阵似乎毫无意义,但实际上我有一段更长的代码,我在其中进一步使用了结果矩阵,并且在那段代码中我也得到了被杀的:9 错误,所以我相信这个问题是一样的)。该代码最多可用于我的张量产品的 15 个条目(尽管速度很慢),但对于 16 个条目,它会给我错误。或许值得一提的是,实际上我的张量积不仅仅是 (0,1) 向量,还包括一些 (1,0) 向量,为了简单起见,我在这里省略了。
非常感谢!
【问题讨论】:
-
数组中的值有多大,您可以尝试将 dtype 从 int64 减少到 int32 或更好的 uint8 以减少内存分配。当我尝试运行您的示例时,它想分配 32 Gb 的 RAM,这就是我所拥有的
标签: python numpy matrix-multiplication