#python #python-3.x #list #numpy #numpy-ndarray
Вопрос:
У меня есть набор значений a,b,c,d, я хочу создать вектор nx1, который распределяет значения по разным строкам на основе размера n. Если n=9, я хочу, чтобы вектор был [a b, a, a c, b, 0, c, b c, d, c d] или если n=4, мой вектор [a b, a c, b c, c d]. Для строки=1 запись равна a b, для строки sqrt(n) запись равна a c,промежуточные записи (т. е. 1 и sqrt(n)) равны a. Для строки=sqrt(n) 1 запись равна b, для 2 sqrt(n) запись равна c, а промежуточные записи-a. Для строки=2 sqrt(n) 1 запись=b c, для строки=n запись равна c d, а промежуточные записи-d. Различные значения n равны n=4, 9,25,100,225 и 400. Есть ли способ построить этот вектор с помощью цикла for вместо ручного создания вектора nx1 и использования операторов if для выделения соответствующего вектора, созданного вручную?
Ответ №1:
s = {} #set filled with values (a b,a,a c...)
n = int(input()) #number of elements you want
l = []
for idx, ele in enumerate(s):
if idx == n:
break
l.append(ele)
Ответ №2:
Я разделил n=4, так как это особый случай
import numpy as np
n = 400
a,b,c,d = 1,2,4,8
result = np.empty((n,1))
sqrtn = n**0.5
if n == 4:
result[:,0] = [a b, a c, b c, c d]
else:
index1 = 0
index2 = int(sqrtn)-1
Index3 = int(sqrtn)
index4 = int(2*sqrtn)-1
index5 = int(2*sqrtn)
index6 = int(n)-1
result[Index3 1:index4] = 0
result[index1 1:index2] = a
result[index5 1:index6] = d
result[index1] = a b
result[index2] = a c
result[Index3] = b
result[index4] = c
result[index5] = b c
result[index6] = c d
Ответ №3:
Вы можете сделать это, написав это
if n == 9:
nx1 = [a b, a, a c, b, 0, c, b c, d, c d]
elif n == 4:
nx1 = [a b, a c, b c, c d]
elif ...