psychopy - ошибка при попытке установить не скалярную переменную через файл условий

Резюме

В PsychoPy v1.85.1 я настраиваю объект стимулов "полигон". Я пытаюсь установить атрибут высоты через файл условий CSV. Я получаю сообщение об ошибке "Неверный параметр. Отдельные числа не принимаются"

подробности

PsychoPy v1.85.1 на Windows.

  • В поле "Размер" всплывающего интерфейса многоугольника я ввожу: $height

  • В csv-файле у меня есть столбец 'height'. Каждая строка имеет такие значения, как: (1,5, 0)

PsychoPy выдает сообщение об ошибке:

  File "C:\Program Files (x86)\PsychoPy2\lib\site-packages\psychopy   \visual\basevisual.py", line 1312, in pos
self.__dict__['pos'] = val2array(value, False, False)
  File "C:\Program Files (x86)\PsychoPy2\lib\site-packages\psychopy\tools\arraytools.py", line 176, in val2array
raise ValueError(msg % str(length))
ValueError: Invalid parameter. Single numbers are not accepted. Should be tuple/list/array of length 2

Устранение неполадок - Разное

  • Скалярные переменные работают в других столбцах csv, поэтому PsychoPy соединяется с csv-файлом.
  • Пробовал формат xlsx.
  • Попытка ввода без круглых скобок и с квадратными скобками

Устранение неполадок - запуск кода вне PsychoPy

Я иду в файл arraytools.py и нахожу соответствующий фрагмент кода. Я вставляю его в записную книжку Python (хотя это Python 3.3) и добавляю несколько строк печати для отладки:

# Copied code snippet from 
# C:\Program Files (x86)\PsychoPy2\lib\site-packages\psychopy\tools\arraytools.py

import numpy

def val2array(value, withNone=True, withScalar=True, length=2):
"""Helper function: converts different input to a numpy array.

    Raises informative error messages if input is invalid.

    withNone: True/False. should 'None' be passed?
    withScalar: True/False. is a scalar an accepted input?
        Will be converted to array of this scalar
    length: False / 2 / 3. Number of elements input should have or be
        converted to. Might be False (do not accept arrays or convert to   such)
"""
    if value is None:
        if withNone:
            return None
        else:
            raise ValueError('Invalid parameter. None is not accepted as '
                         'value.')
    value = numpy.array(value, float)

    print ("value:", value)  #I ADDED
    print ("value.shape:", value.shape)  #I ADDED
    print ("numpy.product(value.shape):", numpy.product(value.shape))  #I ADDED

    if numpy.product(value.shape) == 1: #MY COMMENT: WHY DOES THIS EVALUTE TRUE?
        if withScalar:
            # e.g. 5 becomes array([5.0, 5.0, 5.0]) for length=3
            return numpy.repeat(value, length)
        else:
            msg = ('Invalid parameter. Single numbers are not accepted. '
               'Should be tuple/list/array of length %s')
            raise ValueError(msg % str(length))
    elif value.shape[-1] == length:
        return numpy.array(value, float)
    else:
        msg = 'Invalid parameter. Should be length %s but got length %s.'
        raise ValueError(msg % (str(length), str(len(value))))

Я проверяю это, вводя значение, а затем запускаю функцию.

# Run the function
value = (1.5,0.0)
val2array(value, False, False, length =2)

Результаты ниже. Кажется, работает нормально:

value: [ 1.5  0. ]
value.shape: (2,)
numpy.product(value.shape): 2

Out: array([ 1.5,  0. ])

Отладка в представлении Coder

Спасибо, Майкл. Кажется, что входное значение становится строкой Unicode, которую не может преобразовать функция numey arrary

print "position: ", position
print "type(position): ", type(position)
print "numpy.array(position, float): ", np.array(position, float)

#Results:
position:  (0, 0.5)
type(position):  <type 'unicode'>
numpy.array(position, float): 
Traceback (most recent call last):
 File "C:\Users\nikla\Documents\PsychoPy\test2.py", line 127, in <module>
print "numpy.array(position, float): ", np.array(position, float)
ValueError: could not convert string to float: (0, 0.5)

Есть идеи, что я делаю не так?

2 ответа

Проблема была исправлена ​​путем ввода значений атрибутов (во всплывающем окне с графическим интерфейсом) в квадратных скобках:

[1,5, 0]

Ошибка связана с атрибутом позиции, а не с высотой. Вы устанавливаете положение, чтобы быть скаляром? Это должна быть координата. Попробуйте записать позицию в вашем CSV-файле как (1.5, 0.0) а затем введите $eval(position) в Builder (или как вы назвали колонку позиции).

Другие вопросы по тегам