好吧,我想这一定是一件非常简单的事情,但是不管我怎么格式化它,我总是得到索引错误信息。我的教授让我们用一个1X3的行向量乘以一个3x1的列向量,但是我不能让python读取列向量。行向量来自单元格A1-C1,列向量来自excel电子表格中的单元格A3-A5。我使用了正确的“格式”来表示他想让我们怎么做(如果我做了一些有效的事情,但没有按照他喜欢的方式格式化,我就得不到信任)。行向量在变量explorer中可以正确读取,但我只得到了一个2x2的列向量(第一列是第0列,并且都是零,这也是他想要的),我甚至还没有读到代码的乘法部分,因为我不能让python正确地读取列向量。代码如下:
import xlwings as xw
import numpy as np
filename = 'C:\\python\\homework4.xlsm'
wb=xw.Workbook(filename)
#initialize vectors
a = np.zeros((1+1,3+1))
b = np.zeros((3+1,1+1))
n=3
#Read a and b vectors from excel
for i in range(1,n+1):
for j in range(1,n+1):
a[i,j] = xw.Range((i,j)).value
'end j'
b[i,j] = xw.Range((i+2,j)).value
'end i'
发布于 2016-10-03 17:38:00
像这样的东西应该行得通。迭代i
和j
的方式是错误的(加上a
和b
的初始化)
#initialize vectors
a = np.zeros((1,3))
b = np.zeros((3,1))
n=3
#Read a and b vectors from excel
for i in range(0,n):
a[0,i] = xw.Range((1,i+1)).value
for i in range (0,n)
b[i,0] = xw.Range((3+i,1)).value
发布于 2016-10-03 17:38:13
请记住,Python使用基于0的索引,而Excel使用基于1的索引。
这段代码将正确地读出向量,然后您可以检查numpy“标量积”以产生乘法。你也可以立即赋值整个向量,而不需要循环。
import xlwings as xw
import numpy as np
filename = 'C:\\Temp\\Book2.xlsx'
wb=xw.Book(filename).sheets[0]
n=3
#initialize vectors
a = np.zeros((1,n))
b = np.zeros((n,1))
#Read a and b vectors from excel
for j in range(1,n+1):
a[0, j-1] = wb.range((1, j)).value
b[j-1, 0] = wb.range((j+3-1, 1)).value
#Without loop
a = wb.range((1, 1),(1, 3)).value
b = wb.range((3, 1),(5, 1)).value
https://stackoverflow.com/questions/39827924
复制相似问题