因此,我是python的新手。以前,我曾经使用C语言进行编码,在那儿我广泛使用了数组,但是在python中,我们没有选择直接使用数组而不导入“ array”模块的选项。我最近了解了列表,但是我想在python中实现数组而不是列表。 在我的代码中,我尝试输入array(2d)的尺寸,然后输入其元素,然后进行打印。稍后,我计划输入另一个数组并将其与前一个数组相乘。 但是,每次我运行此代码时,都会收到一条错误消息:“数组索引超出范围”。 我很清楚这个错误,但是在这里我无法弄清楚什么是错误的。 请帮帮我。
这也是我关于堆栈溢出的第一个问题,所以如果我的问题框架错误,请原谅我。
import pandas as pd
import numpy as np
# Example data frame
df = pd.DataFrame({'start': ['2016-01-01 00:00:00', '2016-01-02 01:00:00', '2016-01-15 08:00:00', '2016-01-16 07:00:00'],
'end': ['2016-01-02 00:00:00', '2016-01-03 00:00:00', '2016-01-16 07:00:00', '2016-01-16 07:00:00'],
'id': [0, 1, 0, 2],
'x': [200, 100, 15, 80]})
# Convert the strings in datetimes
df['start'] = pd.to_datetime(df['start'], format='%Y-%m-%d %H:%M:%S')
df['end'] = pd.to_datetime(df['end'], format='%Y-%m-%d %H:%M:%S')
# Get the date time offset
OFFSET = pd.datetime(2016, 1, 1, 0, 0, 0).timestamp() # this is the first date time I have
# Convert the dates in integers (conversion to nanoseconds and then to hours
df['start'] = ((df['start'].astype(np.int64) / (1e9) - OFFSET) / 3600).astype(np.int32) - 1
df['end'] = ((df['end'].astype(np.int64) / (1e9) - OFFSET) / 3600).astype(np.int32) - 1
# Target data structure
x = np.zeros((1000, 3)) # this must have a number of rows equal to the number of time stamps
# Put the data into the target structure
for i in range(0, 3):
x[df.iloc[i].start:df.iloc[i].end, df.iloc[i].id] = df.iloc[i].x
答案 0 :(得分:0)
您可以将numpy arrays用于此类任务(matrix multiplication和其他有用的东西):
import numpy as np
import sys
print("First array: ")
a1 = int(input("No. of rows: "))
b1 = int(input("No. of columns: "))
print("Second array")
a2 = int(input("No. of rows: "))
b2 = int(input("No. of columns: "))
if b1 != a2:
print("Wrong array size!")
sys.exit(-1)
array1 = np.zeros((a1,b1))
array2 = np.zeros((a2,b2))
print("Enter first array:")
for x in range(0,a1):
for y in range(0,b1):
array1[x,y] = float(input("Enter %d %d: " % (x,y)))
print(array1)
print("Enter second array:")
for x in range(0,a2):
for y in range(0,b2):
array2[x,y] = float(input("Enter %d %d: " % (x,y)))
print(array2)
答案 1 :(得分:0)
python array
模块旨在表示一维数组,即列表。它不支持2D或其他更高维度,因为该模块限制了数组元素的数据类型。当您说array1 = array('i', [])
时,表示“创建一个仅接受整数值的列表,并以空列表开头”。
如果您不想使用numpy或其他矩阵库,则可以执行以下操作(请参见注释):
print("First array: ")
a = int(input("No. of rows: "))
b = int(input("No. of columns: "))
print("Second array")
x = int(input("No. of rows: "))
y = int(input("No. of columns: "))
if (b == x):
array1 = [] ## empty 1-D list
array2 = []
for i in range(0,a):
array1.append([]) ## add a row
for j in range(0,b):
n1 = int(input("Enter values for first array: "))
array1[i].append(n1) ## add a column value to row
print(array1)
for i in range(0,x):
array2.append([])
for j in range(0,y):
n2 = int(input("Enter values for first array: "))
array2[i].append(n2)
print(array2)