python - 如何在纯python中执行2个矩阵的张量积
问题描述
我希望用纯 python 表达 np.kron 函数正在做什么。
假设我有这些列表:
v1 = [1, 0, 0, 1]
v2 = [1, 0, 0, 1]
我想定义一个函数,通过将 v1 乘以 v2 中的每个元素来创建列表列表。所以这两个列表会产生 4 个列表:
[[1 * v1[0]],[0 * v1[1]],[ * v1[3]],[1 * v1[3]]]
目前,我一直在搞乱一堆东西。但不能让它工作。例如,当我运行此代码时,我得到一个 4x2 矩阵:
i = [[a*b for a in eye] for b in eye2]
>>[[1, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1]]
当我转换为 np.array 并重新格式化它时,它看起来不太正确:
print(np.array(i).reshape(4,4))
[[1 0 0 1]
[0 0 0 0]
[0 0 0 0]
[1 0 0 1]]
如果通过 np.kron (v1, v2),它将给出:
[[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]]
这是一个漂亮的 4 x 4 单位矩阵;这就是我要找的。
解决方案
您需要检查计算是否按照此图像中的正确顺序完成。请记住,这是克罗内克积而不是张量积,因为这是您在问题描述中所说的,而不是标题。
import numpy as np
v1 = [1, 0, 0, 1]
v2 = [1, 0, 0, 1]
v1 = np.array(v1).reshape(2, 2)
v2 = np.array(v2).reshape(2, 2)
i = [[num1 * num2 for num1 in elem1 for num2 in v2[row]] for elem1 in v1 for row in range(len(v2))]
print(' ')
print("With list comprehension: ")
print(np.array(i).reshape(4, 4))
print(' ')
print("With numpy kron: ")
print(np.kron(v1, v2))
推荐阅读
- python - 为什么 Positco 返回的时间戳比使用 psycopg2 传入的时间戳不正确
- r - 将数据框转换回规则(arules 包)
- c# - c#无限方法切换循环。尝试执行该方法并以返回结束它;语句,但它循环回到方法的开头
- python - Python TypeError:只有整数标量数组可以转换为标量索引
- python - 如何在 tensorflow 会话中使用 mean_squared_error 损失
- c# - 从下拉列表中选择时,Selenium C# 对象不在视图中
- android - 布局包含时测试失败
对于我的 customView - wordpress - 当 Slider Revolution 插件处于活动状态时,Wordpress 页面编辑器无法在文本和可视模式之间切换
- javascript - 如何用 Church 编码延迟类型?
- python - 无法导入 TensorFlow v1.12